文件版號 v2026100501 · 交付怎麼變成部署,以及產生交付的 pipeline 的一種做法。 · 互動原版 ↗
從交付到部署(SRE 端 — 約定)
- 前一工作日: Release Manager 每個 repo 開一份上版申請 — tag、完整 commit hash、release plan、退版方式。
- 核對: tag 必須指向交付的 hash;對不上就不上。
- 灰度: release day 11:00–14:00,整組上,可以 n 次;任一 repo 有問題就整組撤回、重新交付。14:00 灰度終止,沒通過就排下一個 release day。
- Production: 依 release plan 順序,每個 repo 用與灰度相同的 artifact digest。
- 退版: 依 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.js | Java Spring Boot | Laravel |
|---|
| Build | multi-stage,output: 'standalone' | multi-stage jar → JRE image | multi-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 |