CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

CI/CD 与发布:从流水线到灰度与回滚

分类:工程技术 · 路径:docs/topics/ci-cd-and-release/README.md

#ci#cd#github-actions#gitlab-ci#release

用 4~6 周从 GitHub Actions 流水线到能搭建带灰度/回滚/可观测的完整发布系统

父主题

顶层主题

子主题(4)

CI/CD 与发布:从流水线到灰度与回滚

0. 元信息

1. 学习路线

流水线核心(GitHub Actions / GitLab CI / CircleCI)
  → 制品、缓存、矩阵、self-hosted runner
  → semver、tag、release branch、changelog
  → CD 策略:蓝绿 / 滚动 / 金丝雀 / 灰度
  → feature flag、Argo Rollouts、Flagger、Spinnaker
  → IaC:Terraform / Pulumi / Ansible
  → GitOps:Argo CD / Flux、drift 检测、多环境
  → DORA Four Keys、SBOM、SLSA、签名、审计
  → 回滚预案、incident response、综合项目

按代码从 commit 到生产这条链学。每一步都跑真实流水线或部署真实环境,先证据后结论。

2. 阶段周数分配

阶段4 周方案6 周方案备注
1. CI 流水线核心0.60.75workflow 语法、jobs/steps、runner
2. 制品、缓存、矩阵0.50.6artifact、cache、matrix、并发
3. Release 与版本化0.40.5semver、tag、release branch、changelog
4. CD 策略与发布0.60.8blue-green / canary / rolling
5. Argo Rollouts / Flagger0.50.75trafficSplit、abort、metric gating
6. IaC 与 GitOps0.50.75Terraform/Pulumi + Argo CD/Flux
7. 可观测、合规、DORA0.50.75SBOM、SLSA、DORA Four Keys、签名
8. 回滚与事故响应0.20.5演练 + retrospective
9. 综合项目0.20.6GitHub Actions → GHCR → k8s canary

4 周方案对应每天满负荷;6 周方案多出的时间用来重做实验和制造故障,不用来囤课。

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1workflow 语法、trigger、jobs、steps、context、env、action、runner一条可跑通的 build+test pipeline能解释每个 step 的作用,不混淆 ${{ }} 表达式与 shell 变量
2artifact、cache、matrix、concurrency、self-hosted runner、OIDC多平台、多版本、多 OS 的 buildx 流水线解释 cache key 设计,矩阵规模 ≤ 256,OIDC 配云权限
3semver、conventional commits、release branch、changelog、git tag语义化版本脚本 + 自动 changelogv1.2.3-rc.1 能稳定 bump,旧 patch 不污染历史
4blue-green、rolling、canary、feature flag、kill switch把一份 deploy manifest 跑成三种策略能说出每种策略的回滚代价、回滚时长、爆炸半径
5Argo Rollouts AnalysisTemplate、Flagger metric provider、Spinnaker pipelinecanary 步骤 + 指标门控写一段 canary YAML 并解释 trafficSplitabort 触发条件
6Terraform state、provider、module、Argo CD Application、Flux GitRepository一份可漂移检测的多环境 repoterraform planargocd app diff 能分别指出差异
7SBOM、SLSA provenance、cosign 签名、audit log、DORA Four Keys制品带 SBOM + 签名 + 四指标采集能用 cosign verify 拒签伪造制品;用 DORA 模板出季度报告
8revert、blue-green switch、canary abort、incident doc、retro一次完整回滚演练 + 复盘文档5 分钟内定位上一稳定版本,10 分钟内回滚完成并写 IR
9GitHub Actions → GHCR → k8s Argo Rollouts 金丝雀全链路一个 Web 应用的端到端发布 demo在 demo 环境完成 5 次发布、2 次金丝雀、1 次回滚并截图留证

关键陷阱有四个:流水线只跑 happy path;用 latest tag 部署;CD 策略选错爆炸半径太大;只看部署成功,不看 DORA 数据。

4. 第一周任务

Day 1 运行约定:使用 GitHub Actions(免费额度 2000 分钟/月,公开仓库无限);记录 gh --versionact --version(本地 runner)、kubectl versiondocker versionterraform version。所有命令记录 commit SHA、runner label、时间戳。回滚演练前先在 staging 跑一次。

任务当天交付
Day 1在 GitHub 创建一个空 repo,写 .github/workflows/ci.ymlon: pushecho "Hello CI" + actions/checkout@v4第一次绿勾 workflow run 截图
Day 2加 jobs:builddocker buildx buildtestgo test ./...(或同等语言测试);用 needs 控制顺序两 jobs 的依赖图与日志
Day 3actions/upload-artifact@v4 上传构建产物;加 actions/cache@v4 缓存 go module / npm cacheartifact 下载链接 + cache 命中日志
Day 4matrix: { os: [ubuntu-latest, macos-latest], node: [18, 20] };看并发数变化4 个 job 矩阵截图
Day 5docker/login-action@v3 推到 GHCR(ghcr.io/<owner>/<repo>);配 OIDC镜像可见、tag 正确
Day 6在 k8s 上部署 GHCR 镜像;用 kubectl rollout status 观察;触发一个新 commit 验证更新deployment 状态变化截图
Day 7步骤 A:把上面六天的产出拼成一条能 build → test → scan → push → deploy 的流水线;步骤 B:制造 4 类失败——单元测试失败、scan 报 critical CVE、镜像 push 401、deploy 找不到 image,并记录如何回滚流水线截图 + 4 类失败的处理记录

5. 阶段通用验收

  1. 不看答案独立写一条 GitHub Actions workflow;
  2. 用自己的话解释 CI/CD 关键概念(jobs/steps、artifact、cache、matrix、runner、OIDC);
  3. 画一张图:commit → CI → registry → CD → 环境 → 监控;
  4. 测试正常、测试失败、scan 失败、push 失败、deploy 失败、回滚六类路径;
  5. 至少准备 3 个真实仓库并贴出实际 workflow run 链接;
  6. 记录 DORA Four Keys(部署频率、变更前置时间、变更失败率、失败恢复时间);
  7. 能修改既有流水线(加 stage、修 cache、加 secret 旋转),而不是只能照抄。

6. 最终验收

7. 综合项目

首选:为一个真实 Web 应用搭建 GitHub Actions → GHCR → k8s Argo Rollouts 金丝雀发布全链路。

必须包含:workflow(on push / on tag / merge queue)、multi-stage build、image 扫描(trivy / cosign)、SBOM 输出、GHCR 推送(OIDC)、k8s manifest、Argo Rollouts Canary 步骤(含 AnalysisTemplate 用 Prometheus 指标门控)、自动回滚、merge queue、Dashboard(Grafana)四指标。

备选:把现有手动发布流程重构为 GitOps(Argo CD + IaC)。

把现有应用从 kubectl apply / 脚本部署改成 Application + GitRepository 模式,配 Terraform 管云资源、Helm 管 k8s 资源,实现 push-to-deploy 与 drift 检测。

任何项目都需包含:

  1. 需求与成功标准(DORA 指标目标);
  2. 流水线拓扑、Runner 与 cache 选择理由;
  3. 关键 YAML(workflow、Rollout、Application);
  4. 模块化源码或 manifest;
  5. 正常/失败/回滚测试;
  6. 环境、权限、清理和脱敏说明;
  7. README + Dashboard + 原始证据索引;
  8. retrospective(用时、难点、收获、下一步)。

8. 推荐开源资料

角色资料许可证 / 可访问性用法
CI 文档GitHub Actions 官方文档公开文档workflow 语法、OIDC、artifact 全部查这
CI 文档GitLab CI/CD 文档公开文档对照 .gitlab-ci.yml 与 GitHub Actions 差异
CI 文档CircleCI 文档公开文档orbs、context、matrix 设计参考
CD 文档Argo Rollouts 文档Apache-2.0,公开canary / blue-green / AnalysisTemplate 主线
CD 文档Flagger 文档Apache-2.0,公开对照 Argo Rollouts 的轻量选择
CD 文档Spinnaker 文档Apache-2.0,公开多云 pipeline、stage 模型
经典书Humble & Farley, Continuous Delivery商业书籍「部署流水线」原始定义
经典书Kim, Behrens, Spafford, The Phoenix Project商业书籍DevOps 文化入门小说
经典书Forsgren, Humble, Kim, Accelerate商业书籍DORA Four Keys 的统计基础
IaCTerraform 官方文档MPL-2.0,公开state、module、provider 主线
IaCPulumi 官方文档Apache-2.0,公开用通用语言写 IaC
GitOpsArgo CD 文档Apache-2.0,公开Application、Sync、Drift 主线
GitOpsFlux 文档Apache-2.0,公开GitRepository、Kustomize、Helm 主线
安全SLSA 框架公开规范供应链等级模型
安全Sigstore CosignApache-2.0,公开无密钥签名、verify-blob
可观测DORA Four Keys公开指南四指标采集与解读

默认顺序:先跑通一条 happy path → 加失败注入 → 加 cache/matrix → 拆 CD 策略 → 上 GitOps → 上签名/SBOM → 出 DORA 卡。

9. 学习资料汇聚(v0.3 自包含)

本节由本计划生成。链接指向原始材料或作者公开内容。标准会更新,实验记录必须写明版本和日期。

9.1 背景与动机

CI/CD 不是工具集,是工程纪律。它回答一个老问题:怎么让代码变更以可预测、低风险、可回滚的方式持续流到生产。

1990 年代之前,软件以季度/年度发布。Jez Humble 和 David Farley 在《Continuous Delivery》一书中提出「部署流水线」概念:build → test → deploy 是一条单一路径,每一步都有自动验证和回滚手段。Eric Ries 的《The Lean Startup》同期把 build-measure-learn 循环搬到软件交付上,强调 MVPS(小可行发布)。

2010 年代后,DORA(Dora DevOps Research and Assessment)开始量化交付能力:DORA Four Keys(部署频率、变更前置时间、变更失败率、失败恢复时间)。Forsgren、Humble、Kim 在 Accelerate 中用四年统计把 DORA 与组织绩效绑死,今天几乎所有工程效能报告都会引这四个数字。

今天这条链上的工具组合通常是:GitHub Actions / GitLab CI 做 CI;Argo CD / Flux 做 GitOps;Argo Rollouts / Flagger / Spinnaker 做渐进式发布;Terraform / Pulumi 做云资源 IaC;Sigstore / SLSA 做供应链签名;Prometheus / Grafana 做 DORA 看板。学习 CI/CD 的价值不在于记住某个工具的 YAML,而在理解「让变更持续安全地流向生产」这件事的全链路权衡。

9.2 概念地图

flowchart LR
  Commit[commit / merge queue] --> CI[CI runner]
  CI --> Build[build / multi-stage]
  Build --> Test[unit / integration]
  Test --> Scan[scan / SBOM]
  Scan --> Sign[cosign sign]
  Sign --> Registry[OCI registry]
  Registry --> CD[CD controller]
  CD --> Strategy{release strategy}
  Strategy --> BlueGreen[blue-green]
  Strategy --> Rolling[rolling]
  Strategy --> Canary[canary / Argo Rollouts]
  CD --> IaC[Terraform / Pulumi]
  CD --> GitOps[Argo CD / Flux]
  Canary --> Metrics[Prometheus gate]
  Canary --> Flag[feature flag]
  Metrics --> Decision{abort?}
  Decision -- yes --> Rollback[rollback]
  Decision -- no --> Promote[promote]
  Promote --> Observability[DORA / audit log]
  Observability -.反馈.-> CI

核心关系:commit 触发 CI;CI 产出可签名、可扫描的 OCI 制品;CD controller(Argo CD / Rollouts)按策略分发到目标环境;策略选择决定回滚代价;指标、feature flag、审计日志形成反馈环,反过来影响下次发布的策略与质量门。

9.3 基础知识讲解

9.3.1 经典论文 / 规范

资料影响建议读法
Humble & Farley, Continuous Delivery (2010)「部署流水线」原始定义;把自动化测试、版本控制、持续集成、可重复部署串成一条线看第二章「配置管理」与第八章「部署流水线」
Forsgren, Humble, Kim, Accelerate (2018)DORA Four Keys 的统计基础;把交付能力与组织绩效绑死看第三章「技术实践」与第四章「DORA 模型」
DORA, Accelerate State of DevOps Report(年度更新)行业基线与高/中/低绩效切分当下报告查 dora.dev/reports
Beck et al., The Agile Manifesto (2001)早于 CD 几年,但个体/协作/可工作软件/响应变化四个价值观直接喂给 CI/CD 文化原文很短,对照反思现状
Reis, The Lean Startup (2011)build-measure-learn;CDP(Continuous Deployment Pipeline)是 MVP 工程化看第 6、9 章
NIST SP 800-204CDevSecOps 流水线安全实践查 supply chain 章节
SLSA v1.0供应链完整性等级模型(L1-L4)slsa.dev 读 L3 要求

9.3.2 经典书籍

影响用法
Humble & Farley, Continuous Delivery上面已说入门主线
Forsgren, Humble, Kim, Accelerate上面已说配合 DORA 看数据
Kim, Behrens, Spafford, The Phoenix ProjectDevOps 文化入门小说帮推动组织变革时引用
Brikman, Terraform: Up & Running(3rd ed., 2022)Terraform 实战与模块化IaC 主线
Burns, Designing Distributed Systemssidecar / ambassador / adapter 模式流水线 service mesh 用法
Majors, Observability EngineeringOTel/Prometheus/SLI/SLO 实操DORA 卡的可观测底层
Kim, The Site Reliability WorkbookSRE 实践配合事故响应章节看
Humble, Continuous Delivery in the Wild大规模组织的真实数据进阶
Skelton, Pais, Team Topologies团队拓扑与交付节奏配合文化章节
Ford, Building Evolutionary Architectures架构适应度函数与 canary / feature flag 结合

备查:Kim 等的 The DevOps Handbook;Vernon, Implementing Domain-Driven Design(DDD 与发布边界)。

9.3.3 优秀博客 / 文档

资料特点用法
GitHub Actions 官方文档workflow 语法、OIDC、artifact、security hardening 全部在这主线查阅
GitLab CI/CD Reference与 Actions 对照看看 DAG 与 includes
Argo Rollouts 文档canary / blue-green / AnalysisTemplate 主线必读
Argo CD 文档Application / Sync / Drift必读
Flux 文档GitOps Toolkit必读
Spinnaker 文档多云 pipeline备查
Flagger 文档轻量渐进发布对照 Argo Rollouts
LaunchDarkly Blogfeature flag 工程实践flag 模式与案例
Charity Majors 博客Observability Engineering 主线配合 SLO
DORA 报告与指南Four Keys + 调研方法必读
Terraform Learnstate、module、importIaC 入门
Pulumi Blog用 TS/Go/Python 写 IaC对照 Terraform
Sigstore Blogcosign / Rekor / Fulcio供应链
Brendan Greggperformance / observability 经典配合 SLO
Julia Evans zines把复杂工具画成一张纸入门破冰

9.3.4 核心人物

人物主要影响建议追踪的材料
Jez HumbleContinuous Delivery、DORA、Accelerate书、DevOps Enterprise Summit 演讲
David FarleyContinuous Delivery、CI/CD 实践派书、博客
Eric RiesLean Startup、build-measure-learn
Gene KimPhoenix Project、DORA书、报告
Nicole ForsgrenDORA、Accelerate 统计论文、报告
Kelsey HightowerKubernetes、GitOps 布道Kubernetes The Hard Way、博客
Charity MajorsObservability Engineering书、博客
Liz RiceContainer Security、eBPF书、演讲
Sam Newman微服务、独立可部署性
Kelsey Evans(FluxCD 维护者之一)GitOps ToolkitGitHub、博客
Dan Lorenc(Chainguard / Sigstore)SLSA / cosign演讲、博客

9.3.5 开发方法

方法具体动作何时用
Pipeline-as-codeworkflow / pipeline 文件版本化、PR review任何 CI/CD 改动
Trunk-based主干开发,short-lived feature branch配合 merge queue 提速
Merge queuePR 排队合并,CI 单测通过才进大 monorepo、高并发 PR
Immutable buildimage 只构建一次,按 digest 提升到各环境杜绝「开发环境能跑、生产跑不了」
Semver + conventional commits自动 bump、生成 changelog任何对外接口
Progressivecanary → metric gate → abort / promote高风险发布
Feature flag发布与部署解耦,runtime 切换跨服务、A/B 实验
GitOps期望状态在 Git,controller 收敛多环境、多租户
Drift detectionterraform planargocd app diff任何声明式资源
SBOM + SLSA provenance构建时生成,对制品签名合规、安全审查
DORA Four Keys自动从 CI/CD + incident 系统采集季度效能复盘
Postmortem without blame时间线、根因、行动项,不追责任何线上事故
Chaos drill主动 kill pod、断网络、错配 secret验证回滚预案
Pin everything锁 base digest、action SHA、provider 版本杜绝供应链漂移

9.4 经典问题与经典案例

问题为什么重要最简答案或证据
latest tag 部署后不知道跑的是哪个版本tag 可变、digest 不可变部署必须按 image@sha256:...
Cache key 设计错,缓存全失效率monorepo 几百个 package,缓存命中直接决定流水线时长cache key 包含 lockfile hash + 操作系统 + runner arch
matrix 超过 256 触发 GitHub Actions 限制上限是流程定义层硬编码拆分 workflow、用 dynamic matrix
OIDC 配置错,cloud credential 泄露长期 key 是供应链最大入口用 OIDC 短期 token,actions 配 permissions: id-token: write
Canary 指标门控不灵,把烂版本推广到 100%没有 metric provider 或 threshold 错AnalysisTemplate 跑两次:基线 → canary,对比错误率/P99
Drift 出现,argocd app diff 一直有差异有人手动 kubectl edit,声明式失效禁外网写入、事件告警、自动 Self-Heal
cosign verify 失败,无法判断是不是伪造没启用 keyless 或 trust root配 Fulcio + Rekor,verify 用 transparency log
DORA 变更失败率突然飙升看不到原因,只能事后数在 CI 里埋指标,导出 Prometheus 或 BigQuery
Semver bump 错,旧 patch 升级破坏下游prerelease、build metadata 不规范release-please / semantic-release,禁用手动改
回滚按钮找不着,或点了不生效蓝绿忘了保留旧版本,canary abort 路径没人跑过每次发布保留 last-known-good,定期演练
Merge queue 死锁,PR 卡住多个 PR 同时等 CI看 queue 日志,调整 concurrency 与 retry
SBOM 输出后没人看合规要求但没有「must be free of CVE ≥ severity」策略卡 release gate,severity ≥ high 必须有 fix 或 exception
Terraform state lock 失效,并发 plan 损坏没启用 DynamoDB/Consul 锁配 S3 backend + DynamoDB lock
Helm chart 升级失败,rollback 也失败Helm v2 client + v3 repo 混用锁 Helm 与 chart 版本,演练 upgrade → rollback
半夜发布无人审批没设 maintenance window / approvalrelease pipeline 强制 approval + on-call 联动

9.5 学习难点

概念难点

难点为什么会卡突破路径
Pipeline vs deployCI 跑测、CD 跑发布,混在一起导致 rollback 困难CI 不直连生产,CD 接签名制品
Tag vs digestlatest 看起来是版本,实际是 mutable pointer部署用 digest,仓库只存 digest+tag 对照表
Canary vs feature flag都能降风险,但粒度不同canary 按版本切换,flag 按用户/租户切换
GitOps 与 push 部署都改了文件,谁是 source of truthGitOps 收敛到 controller;CLI 直连视为违规

思维难点

难点为什么会卡突破路径
从失败到根因「流水线红了」不是诊断看 step log、看 runner log、看 artifact、看网络
策略选择蓝绿、滚动、金丝雀各有权衡用爆炸半径 × 回滚时长 × 资源开销三维评估
度量与噪音DORA 指标一旦采集,会引诱优化错的地方Four Keys 是顶层,下面再细分到 component
变更 vs 部署「改了 5 行」和「发到生产」是两件事区分 commit frequency 与 deploy frequency

工程难点

难点为什么会卡突破路径
OIDC 配错trust policy / audience 错,token 拿不到先在 staging 跑通,看 cloud audit log 是否出现 role
Cosign verify 在 air-gapped 环境Rekor transparency log 不可达离线 TUF / 自建 Fulcio,或改用 KMS 签名
多集群 GitOps100+ cluster,Argo CD 单实例扛不住Hub-and-spoke 或 ApplicationSet + cluster generator
Canary 指标治理各团队指标不一致维护 canonical AnalysisTemplate,强制复用
Terraform 跨云不同 provider 行为不同用 module 封装,state 按 region/env 拆分
回滚的 rollback vs rollout undokubectl rollout undo 只滚 deployment,Helm release 不动统一 Argo Rollouts / Helm operator 的 abort 接口
合规审计SOC2 / ISO 要求所有变更可追溯audit log + immutable log sink,retention ≥ 1y

9.6 技术标准与接口

9.6.1 Entity

名称版本 / 文档发布组织状态许可证 / 可访问性
GitHub Actionsworkflow schema 当前 2.xGitHub持续更新公开文档
GitLab CI/CD.gitlab-ci.yml schemaGitLab持续更新公开文档
CircleCIconfig.yml schema 2.1+CircleCI持续更新公开文档
Argo CDv2.xCNCF / IntuitGraduatedApache-2.0
Argo Rolloutsv1.xCNCFIncubatingApache-2.0
Argo Workflowsv3.xCNCFIncubatingApache-2.0
Spinnaker持续更新OSS活跃Apache-2.0
Flux CDv2.xCNCF / WeaveworksGraduatedApache-2.0
Terraform1.xHashiCorp活跃MPL-2.0
Pulumi持续更新Pulumi活跃Apache-2.0
Ansible Core2.xRed Hat活跃GPL-3.0
Helmv3CNCFGraduatedApache-2.0
Kustomizev5Kubernetes SIG活跃Apache-2.0
OCI Distribution Specv1.xOCI公开标准Apache-2.0
SLSAv1.0SLSA / Linux Foundation公开规范公开
Sigstore cosignv2.xSigstore活跃Apache-2.0
OIDCRFC 8414 / OpenID Connect CoreIETF / OpenID标准公开
DORA Four Keys2024 指南DORA / Google Cloud公开指南公开

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力CI/CD 与发布的可观察标准
L0知道存在知道 CI、CD、Argo Rollouts、Terraform、cosign、DORA 是什么
L1看得懂示例能读 GitHub Actions workflow、Argo Rollouts Canary、Terraform resource
L2能正确调用能写一条 pipeline、配一个 Rollout 跑通、跑 terraform apply
L3能解释与排错能从 runner log / AnalysisRun 报告 / drift diff 解释失败与决策
L4能设计与扩展能设计 multi-tenant GitOps、custom controller、cross-cloud IaC、audit pipeline

本父主题目标是 L3。自定义 controller 或跨云 IaC 可触及局部 L4,但不作为 4~6 周硬门槛。

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

  1. 编程语言;2. 数据结构与算法;3. 计算机基础;4. 工程技术;5. Web 与后端;6. 前端与客户端;7. 数据与人工智能;8. 项目与职业能力;9. 安全与可靠性。

本计划归属:工程技术 主 + 安全与可靠性 辅。


直接依赖(3)

查看知识图谱