Nic Lin's Blog

喜歡在地上滾的工程師

10 分鐘整合 google sheet 做自動化開發功能週報

當公司團隊人數較少,沒有明顯部門區分的時候,以技術開發產品的流程來說,其實很快就可以讓成員相互流通資訊,知道今天要上什麼功能,主要由誰負責。

但當公司產品線開始拓展,開發人員也跟著變多,有了前後端不同部門以及更多的 client 例如 website / APP 甚至是內部人員操作的 admin 後台,這時候再加上 CI/CD flow,到底哪一版進 QA、哪版準備 release?

要如何能夠讓資訊有效流通,快速的 announcement 就會是一個值得思考的事情,避免功能上了客服卻一頭矇、老闆以為工程部沒有開發實際功能、行銷需要屢屢確定功能到底上了沒有

如果可以透過一個誰都能看的表單,來清楚知道開發進度及資訊,會不會有效加速資訊的流通?

為什麼選擇 google sheet

  • 低成本,隨開即用
  • 團隊中不會遇到打不開的情況
  • 學習查詢的成本低
  • 更快實作 API endpoint

整合 Integration

基本上依照公司用的 git hosting,無論是 github / gitlab / gitea,其實原理都一樣,就是當行為觸發時,利用 webhook 轉送訊息到某處,在將其寫入 google sheet

所以整個搭建的流程就是

  1. 實作 google sheet API
  2. 實作簡易 server 轉發資料
  3. 設定 git hosting 上的 webhook

這裡講一下 google sheet 的實作細節

先到 google drive 中新增「Google 試算表」

第一行先依序填入 「種類」「標題」「作者」以及「時間」

然後把網址列中的 sheet ID 記錄下來,位置在網址列 https://docs.google.com/spreadsheets/d/ 以後至 edit 中間的代碼

Sheet ID

然而這個試算表可以打開他的指令碼編輯功能

然後在裡面填上以下程式碼,並填入剛才拿到的 Sheet ID

function doPost(e) {
  var params = e.parameter;
  
  var type = params.type;
  var title = params.title;
  var author = params.author;
  var merged_at = params.merged_at;

  var SpreadSheet = SpreadsheetApp.openById("輸入自己的 Sheet ID");
  var Sheet = SpreadSheet.getSheets()[0];
  var LastRow = Sheet.getLastRow();


  //存入資訊
  Sheet.getRange(LastRow+1, 1).setValue(type);
  Sheet.getRange(LastRow+1, 2).setValue(title);
  Sheet.getRange(LastRow+1, 3).setValue(author);
  Sheet.getRange(LastRow+1, 4).setValue(merged_at);
  
  //回傳資訊
  return ContentService.createTextOutput("成功");
}

選擇發佈 => 部署爲網路應用程式

將具有應用程式存取權的使用者改爲「任何人,甚至是匿名使用者」並點選部署。

你就會拿到一個網址類似 https://script.google.com/macros/s/xxxxxxxxxx/exec

這個就像是你的 backend API endpoint,只不過 google sheet 幫你處理好了

那麼轉發的 server 怎麼處理呢?

我都幫你準備好了,直接打開 Repo 一鍵 deploy 到 Heroku

中間會請你填上 URL,就是剛剛上面那一串

待 Heroku 部署好之後,你就有自己轉送訊息的 APP server 了

這裡以 Github 為例,打開專案內 settings => Webhooks =>

拿著網址去 Github 填入 http://YOUR_DOMAIN.herokuapp.com/api/v0/feature_report

並勾選 Let me select individual events.Pull requests

試著 merge PR 應該會看到 google sheet 連動生成記錄

如果有不想被寫進的 PR,可以在 Label 裡面添加 skip_notify,這樣轉發訊息的 server 就會自動跳過

標記種類的方式依據 label 標籤決定

  • enhancement => 優化
  • bug => 修正

什麼都不填寫的狀況,則預設種類為「功能」

其實到這裡只是把 merge 過後的 PR 蒐集起來,方便知道進度,但撈時間區間例如週報、月報,就需要額外在 sheet 上面下 query 條件了,這部分就不多著墨敘述囉

小結

這是屬於比較粗糙的做法,不過我認為拿來實現提升資訊流通應該算是綽綽有餘,不需要花太多時間 coding 也沒有任何花費。

如果沒有經濟狀況或其他考量的話,我之前都是用 zapier 這個第三方服務去做串接,其實更省事,UI 照著步驟點一點就可以輕鬆組合自己要的服務。

comments powered by Disqus