全自動化 CI/CD 流水線實作

這個專案的重點是一條完整的 CI/CD 與多雲部署流程。以下以流程為主說明。

看成品 ▸ 0050 即時儀表板(buy0050.xyz)

示範應用程式

一支用 Flask 寫的台股 0050 ETF 即時儀表板,資料來自 Yahoo Finance,以 Docker 容器執行、健康檢查端點為 /api/status。它在這裡的角色是「被部署的對象」。

CI/CD 流程

程式碼放在自架的 GitLab,CI 由自架的 Jenkins(multibranch pipeline)執行。推送與合併會自動觸發建置:GitLab 以 webhook 通知 Jenkins,另有每 2 分鐘的定期掃描作為後備。整體流程如下圖:

CI/CD 流程圖

MR(開發中)流程

  1. 開發者推分支、開 Merge Request,Jenkins 自動建置該 MR。
  2. Build:以 docker build 建置應用映像。
  3. Test:啟動容器,對健康檢查端點做測試。
  4. 測試失敗則靜默結束、不發任何通知;通過才進入下一步。
  5. AI Review:自動產生程式碼摘要並貼回 GitLab(見下一節)。
  6. PM 審核摘要後,把 MR 合併進 main。

main(合併後)流程

  1. Build → Test → Push:重新建置測試後,把映像推到私有 registry。
  2. 部署關卡:停在人工核准點,需由 devops 角色核准才繼續。
  3. 核准後執行部署(見「部署」一節)。
  4. 整條 main 流程用同一則可即時編輯的 Discord 訊息追蹤:建置、測試、推送、部署各階段的進度與成敗都更新在那一則訊息上。

角色分工

流程中以三個獨立的 GitLab 帳號分工:開發者負責開 MR、PM 負責審核與合併、devops 負責核准部署。

AI 程式碼審查

每個 MR 在測試通過後,會用 Flue 框架驅動 Gemini,讀取該次的 git diff,產生 100 字以內的中文審查摘要。

部署

用 Terraform 以宣告式管理所有雲端資源,state 存在 AWS S3。同一份映像會部署到多個平台:

使用的工具

Jenkins、GitLab、Docker、Terraform、AWS(ECS、ECR)、GCP(Cloud Run、Artifact Registry)、Cloudflare、Gemini、Flue;應用程式為 Flask / Python。


有問題可以點右下角按鈕問 AI。