原本 App Team 包含我僅有兩位開發者,我負責領導開發忙得不可開交。去年 Q4,親自招募兩位新人進駐,我終於可以有空閒時間做 Flutter App 的 CICD。🙂
2019 年在港商工作時,已有建置 iOS CICD 流程經驗,所以首選 Jenkins 來作為持續整合工具,節省研究時間,稍微比較其他工具後,認為 Jenkins 相關套件外掛多,未來有需有可以擴充。另因 Jenkins 有直覺的操作介面,使得無論是工程人員或是團隊其他成員,都能迅速上手。
註:
- CI(Continuous Integration,持續整合)
- CD(Continuous Delivery / Continuous Deployment,持續交付 / 持續部署)
簡單比喻
- CI:像是每次寫完一小段文章就馬上拼到全文裡,再跑拼字檢查。
- CD:檢查通過後,自動把這篇文章印刷出版(交付)或直接送到讀者家(部署)。
我將 Shell Scrip 流程圖解如下:
.
接著使用時序圖(Sequence Diagram)呈現 Jenkins 與工具間的互動(如 xcodebuild、altool):

.
以上是最精簡關鍵的流程步驟。
進一步改進版本:
- 每個環境獨立處理流程
- 上傳失敗的錯誤回應與重試機制
- Slack 通知成功或失敗結果
- 所有環境完成後的總結通知
- Git 推送版本觸發 Jenkins 任務
- 在打包後記錄 IPA 檔案大小
- 計算並上報打包與上傳耗時
- 在 Slack 通知中加入檔案大小與時間資訊
- TestFlight 測試人員回饋回傳

.
若以更宏觀角度來看每個環境陸續進行:

.
當然流程項目還可以再進行優化,端視專案需求到何種境界。
當前我們有四個環境,但也不是一次就要打包四個環境的 App 來做測試,若每次小增修就要跑整個 CICD 流程,肯定會耗費大量時間。比如進行 DEV App 測試就遇到A功能有問題,之後的 UAT/PT/Production App 就根本不用測試A功能,這些已打包部署好的版本就是浪費掉。
於是想要全部流程自動化,那是專案在非常理想的狀態下才可行。在我們的專案中,還是需要些許手動設定調整,來打包部署所需要的版本。🙃
—
人生也是一連串持續整合、交付、部署的過程。

隨意留個言吧:)~