環境、CI/CD 與部署

讓一份程式變成可重現的 artifact,並安全地送到正式環境

讓一份程式變成可重現的 artifact,並安全地送到正式環境

一份 Code 會經過哪些環境?

Local Development
  → CI Runner
  → Test / Integration
  → Staging / Pre-production
  → Production

每個環境的資料、權限、設定與容量可能不同。


Configuration 與 Secret

  • Code 與環境設定分離
  • .env、environment variable、config file、secret manager
  • API key、password、certificate 不進 Git
  • 不同環境使用不同 credential 與最小權限
  • 設定變更也需要版本、審查與回復方式

Docker 解決什麼問題?

  • 固定 runtime、system package 與啟動方式
  • Image 是不可變的建置產物
  • Container 是 image 的執行實例
  • Volume 保存持久資料,network 連接服務
  • Dockerfile、build context、layer 與 image registry

Build 與 Artifact

  • Compile、bundle、package、containerize
  • Lock dependency 與產生 SBOM
  • Artifact 應不可變、可追溯、可重複部署
  • Version、commit SHA、build number 與 checksum
  • 同一份 artifact 從測試環境 promotion 到正式環境

Continuous Integration

push / PR
  → checkout
  → install dependencies
  → build、lint、test、scan
  → 產生 artifact 與報告

目標是盡快發現整合問題,而不是累積到發布前。


Pipeline、Job、Step 與 Runner

  • Workflow/pipeline:完整自動化流程
  • Job:可在不同 runner 平行或依序執行的單位
  • Step:job 裡的單一操作
  • Runner/agent:實際執行工作的機器或容器
  • Artifact、cache、environment、approval、secret

Continuous Delivery 與 Deployment

名稱 差異
Continuous Delivery 每次變更都準備好發布,但正式上線可人工核准
Continuous Deployment 通過護欄後自動部署到 production

自動化程度取決於風險、法規與復原能力。


Database Migration 的部署順序

  • Forward-only migration 與 rollback script
  • Expand:先加入新 schema,保持舊 Code 可用
  • Migrate:搬移或 backfill 資料
  • Contract:確認舊版本離開後再刪除舊 schema
  • 部署前評估 lock、容量、時間與備份

常見 Deployment Strategy

策略 特性
Recreate 先停舊版再上新版,簡單但有中斷
Rolling 分批替換 instance
Blue-green 新舊兩套環境切換流量
Canary 先讓少量流量使用新版
Feature flag 部署 Code 與開放功能分開

部署前後的檢查

  • Pre-deploy checklist、approval 與 change window
  • Health check、readiness、liveness
  • Smoke test 與關鍵使用者流程
  • 版本、設定、migration 與依賴確認
  • 部署後 metrics、log、error rate 與 business KPI

Rollback 與 Roll Forward

  • Rollback:切回上一個可用版本
  • Roll forward:快速部署修正版
  • Feature flag:關閉有問題的功能
  • Database 與外部副作用不一定能單純倒退
  • 事前定義 trigger、owner、步驟與驗證方式

Infrastructure as Code

  • 用 Terraform、CloudFormation、Ansible 等描述環境
  • Plan/diff 後再 apply
  • Module、state、provider 與 drift
  • 基礎設施變更進入 Git、PR、review 與 pipeline
  • 高風險操作仍需權限隔離與人工核准

一次 Release 要能追溯

需求/issue
 → PR/commit
 → CI run/artifact
 → tag/release note
 → deployment
 → production verification

出問題時才能知道哪一份內容跑在哪個環境。


看到 Agent 部署時

要知道它正在 build、publish artifact、run migration、
promote release、deploy、smoke test,還是 rollback。

「部署成功」必須包含正式環境的驗證證據