跳至主要内容

02 · CI/CD 細節

文件版號 v2026100501 · 交付怎麼變成部署,以及產生交付的 pipeline 的一種做法。 · 互動原版 ↗

從交付到部署(SRE 端 — 約定)​

  1. 前一工作日: Release Manager 每個 repo 開一份上版申請 — tag、完整 commit hash、release plan、退版方式。
  2. 核對: tag 必須指向交付的 hash;對不上就不上。
  3. 灰度: release day 11:00–14:00,整組上,可以 n 次;任一 repo 有問題就整組撤回、重新交付。14:00 灰度終止,沒通過就排下一個 release day。
  4. Production: 依 release plan 順序,每個 repo 用與灰度相同的 artifact digest。
  5. 退版: 依 release plan 反向回到上一版,或用只改設定的變更關掉開關。
環境 repo 路徑誰核核准後
workloads/<svc>/<自驗環境>/自動合併GitOps 同步
workloads/<svc>/gray/SRE(CODEOWNERS)GitOps 同步
workloads/<svc>/production-<cluster>/SRE(CODEOWNERS)GitOps 同步
workloads/<svc>/production-vm/SRE部署 job 在 VM 上 checkout 該 tag 並重啟
退版SRE依 release plan 反向,每個 repo 回到上一版

App repo pipeline(範本)​

  • MR / push: test;手動 deploy-dev;MR 進 master 時跑 check-merge。
  • rc tag: tag-verify → build(唯一一次給灰度 / production 的 build)→ request-deploy(帶 tag、hash、digest 開上版申請)。
  • 正式 tag: tag-verify → retag → release-notes → cleanup。正式 tag 不 build、不部署。
守門條件
check-merge(MR → master)來源是 release/* 或 hotfix/*;最新 commit 正好是 production 上的 rc;master 是這個 commit 的祖先。
tag-verify(tag pipeline)rc tag:commit 在 release/* 或 hotfix/* 上。正式 tag:commit 是 master 最新,檔案樹與某個 rc 相同,且該 rc 是它的祖先。

三個技術棧(範本)​

Next.jsJava Spring BootLaravel
Buildmulti-stage,output: 'standalone'multi-stage jar → JRE imagemulti-stage,composer install --no-dev
設定server 執行期讀 env;NEXT_PUBLIC_* 不放環境值執行期 env / 掛載 application-prod.yaml執行期 env → config/*.php
改設定要重啟env:要;掛載檔:不用要(預設)要(config:cache)
Health/api/health/actuator/health/readiness/up