![]()
CI/CD 常被簡化為自動化,但其更深層的目的在於認知:它將不確定的變更轉化為系統是否仍可安全運作的證據。管線就是一個回饋控制器。原始碼變更是干擾;測試、政策檢查與遙測是感測器;部署策略是執行器;服務等級目標則定義了可接受的運作範圍。
持續整合透過保持變更集小巧並反覆測試其組成,來降低整合熵。持續交付則維持可部署的狀態;持續部署則在政策閘道成功後自動推進變更。這些是不同的成熟度等級,將它們混為一談會產生不安全的期望。
一個可防禦的管線評估的不只是功能正確性:
promote:
needs: [unit, integration, policy, sbom]
environment: production
steps:
- run: cosign verify --key cosign.pub artifact.example/app:$GIT_SHA
- run: deploy --strategy=canary --initial-traffic=1%
- run: verify-slo --window=15m --max-error-budget-burn=2
進入全螢幕模式
離開全螢幕模式
如果每個變更的元件都有某種獨立的機率會引入缺陷,那麼較大的批次會同時增加失敗機率與診斷搜尋空間。獨立性是一個不完美的假設——軟體依賴關係是相關聯的——但結論仍然成立:小批次能縮短回饋延遲並改善因果歸因。因此,部署頻率只有在搭配快速復原與可信賴的驗證時才有價值。
管線成功並非生產安全的證明。測試可能編碼了不完整的規格;預發佈流量很少與正式環境匹配;可變動的標籤可能切斷來源追溯;而核准閘道可能淪為形式主義。一個成熟的設計會將每個閘道視為可否證的主張,並持續衡量其預測能力。例如, flaky 測試並非無害的雜訊:它們削弱了綠色建置的統計意義,並訓練操作人員忽略警報。
https://dev.to/marco13moo/daily-dose-of-devops-what-is-cicd-and-why-it-matters-3ohj
https://www.worldprogramming.org/posts/daily-dose-of-devops-what-is-cicd-and-why-it-matters-ktxq4v