當公司團隊人數較少,沒有明顯部門區分的時候,以技術開發產品的流程來說,其實很快就可以讓成員相互流通資訊,知道今天要上什麼功能,主要由誰負責。
但當公司產品線開始拓展,開發人員也跟著變多,有了前後端不同部門以及更多的 client 例如 website / APP 甚至是內部人員操作的 admin 後台,這時候再加上 CI/CD flow,到底哪一版進 QA、哪版準備 release?
要如何能夠讓資訊有效流通,快速的 announcement 就會是一個值得思考的事情,避免功能上了客服卻一頭矇、老闆以為工程部沒有開發實際功能、行銷需要屢屢確定功能到底上了沒有
如果可以透過一個誰都能看的表單,來清楚知道開發進度及資訊,會不會有效加速資訊的流通?
為什麼選擇 google sheet
- 低成本,隨開即用
- 團隊中不會遇到打不開的情況
- 學習查詢的成本低
- 更快實作 API endpoint
整合 Integration
基本上依照公司用的 git hosting,無論是 github / gitlab / gitea,其實原理都一樣,就是當行為觸發時,利用 webhook 轉送訊息到某處,在將其寫入 google sheet
所以整個搭建的流程就是
- 實作 google sheet API
- 實作簡易 server 轉發資料
- 設定 git hosting 上的 webhook
這裡講一下 google sheet 的實作細節
先到 google drive 中新增「Google 試算表」
第一行先依序填入 「種類」「標題」「作者」以及「時間」
然後把網址列中的 sheet ID 記錄下來,位置在網址列 https://docs.google.com/spreadsheets/d/
以後至 edit 中間的代碼
然而這個試算表可以打開他的指令碼編輯功能
然後在裡面填上以下程式碼,並填入剛才拿到的 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 照著步驟點一點就可以輕鬆組合自己要的服務。