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

Release 策略与渐进发布:semver、蓝绿、金丝雀与回滚

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

#release#canary#blue-green#argo-rollouts#feature-flag

从语义化版本、tag、release branch 到 Argo Rollouts canary / blue-green / Flagger 与 feature flag 的渐进发布落地。

父主题

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

子主题(0)

Release 策略与渐进发布:semver、蓝绿、金丝雀与回滚

0. 元信息

1. 学习路线

semver + conventional commits + release-please
  → tag、release branch、changelog
  → 蓝绿 / 滚动 / 金丝雀策略对比
  → Argo Rollouts Canary 步骤 + AnalysisTemplate
  → Flagger metric provider
  → feature flag(LaunchDarkly / Unleash / OpenFeature)
  → 回滚预案:revert / switch / abort

2. 阶段周数分配

精简子主题不固定周数。按概念、正常路径、失败路径、综合实验四段推进,共 5~8 天。

3. 九阶段表

阶段核心知识实践产出可观察学会标准
1semver、MAJOR.MINOR.PATCH、prerelease、build metadatabump 脚本1.2.3-rc.11.2.3+build.4 不污染语义
2conventional commits、release-please / semantic-release自动 changelogfeat / fix / BREAKING CHANGE 自动分节
3git tag、release branch、cherry-pick、monorepo versioning一个稳定 release branchtag 命名一致,旧 patch 不进新 minor
4蓝绿、滚动、金丝雀、爆炸半径、回滚时长策略对比表能说出每种策略的回滚代价
5Argo Rollouts Canary、trafficSplit、pause、abortcanary 步骤 YAMLsetWeight + pause 步骤并解释
6AnalysisTemplate、AnalysisRun、metric provider、thresholdPrometheus 指标门控错误率 > 5% 自动 abort
7Flagger、Istio / NGINX / App Mesh metric providersFlagger Canary对照 Argo Rollouts 的轻量选择
8LaunchDarkly、Unleash、OpenFeature SDK、kill switchflag 切换flag flip 在 1 秒内生效,无 deploy
9回滚预案:revert / blue-green switch / canary abort / feature flag off演练记录 + retrospective5 分钟内定位上一稳定版本

4. 第一周任务

精简子主题省略逐日表。每天只引入一个变量;先跑正常路径,再做四类失败实验。Day 1 必须明确 semver 规则与 release branch 命名。

5. 阶段通用验收

采用父主题 §5;本页额外要求保存策略对比表、canary YAML、AnalysisTemplate、feature flag 配置、回滚演练记录与清理命令。

6. 最终验收

完成 1 份策略对比表、1 段 Argo Rollouts Canary YAML(带 AnalysisTemplate)、1 个 feature flag 集成、至少 4 类失败实验、1 次完整回滚演练,并用 10 分钟解释策略选择与回滚路径。

7. 综合项目

把本页产出合入父主题首选项目:GitHub Actions → GHCR → k8s Argo Rollouts 金丝雀发布全链路。单独交付时,提供 Rollout manifest、AnalysisTemplate、release-please 配置、notes/retrospective.md

本主题贡献

本主题把 release 当成可灰度可回滚的工程:semver 语义化版本、Argo Rollouts canary 步骤、AnalysisTemplate 指标门控、blue-green 流量切换与 feature flag 部署/发布解耦,5 分钟内能定位上一稳定版本。

职责(3 项)

  1. 用 semver + Conventional Commits + release-please 自动 bump 与 changelog,能解释 1.2.3-rc.1 < 1.2.31.2.3+build.4 build metadata 不污染语义、force-with-lease 签 tag 防覆盖、Monorepo 怎么独立 bump 子包版本;
  2. 设计 Argo Rollouts Canary 步骤(setWeight: 10pause: 5msetWeight: 50pausesetWeight: 100)+ AnalysisTemplate 接 Prometheus 指标(错误率/P99/saturation),能解释 failureThreshold + abort 的门控边界,以及 metric provider 不可达时悄悄跑满 100% 的危险;
  3. 设计 blue-green 切换(旧版本一直保留、switch 即回滚)、canary 回滚(abort / rollback 步骤)、feature flag 切换(flag flip 1 秒生效、无 deploy)三条回滚路径,能解释 deploy vs release 的解耦原则。

交付物(4 项)

  1. Argo Rollouts Canary YAML(带 trafficRoutingstepsanalysis),含 setWeight + pause 步骤注释;
  2. AnalysisTemplate(错误率 > 5% 自动 abort)+ AnalysisRun 报告,metric provider = Prometheus;
  3. release-please 配置(Conventional Commits → 自动 PR → 自动 changelog)+ semver bump 脚本;
  4. feature flag 集成(OpenFeature SDK / LaunchDarkly / Unleash 任一)+ 回滚预案(revert / blue-green switch / canary abort / flag off 五段)。

指标(3 项)

  1. canary abort 触发率 ≤ 5%(promote 100% 之前出错能自动回滚);
  2. release rollback MTTR ≤ 5 分钟(git revert / Rollout undo / feature flag off 任一路径);
  3. feature flag 清理周期 ≤ 30 天(CI 检查无主 flag + 到期日)。

8. 推荐开源资料

Argo Rollouts(Apache-2.0)作渐进发布主线;Flagger(Apache-2.0)作对照;Spinnaker(Apache-2.0)作多云;release-please(Apache-2.0)作版本自动化;semantic-release(MIT)作 JS 生态对照;LaunchDarkly / Unleash 文档作 feature flag;OpenFeature(Apache-2.0)作 vendor-neutral 抽象。复制前核对当前 LICENSE。

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

9.1 背景与动机

Release 策略决定爆炸半径与回滚代价。蓝绿:两套环境切换,秒级回滚;滚动:批次替换,零停机但回滚慢;金丝雀:按流量百分比切换,metric-driven 回滚;feature flag:发布与部署解耦,runtime 切换。

Jez Humble 和 David Farley 在《Continuous Delivery》里把「部署与发布解耦」作为关键原则。Eric Ries 在 Lean Startup 里强调小可行发布(MVPS)。今天的 Argo Rollouts、Flagger、Spinnaker 把这些想法工程化。

我们这一节要解决一个具体问题:CI 出可签名制品后,怎么把它安全地送到生产,遇到事故能在 5 分钟内回滚。

9.2 概念地图

flowchart LR
  Tag[git tag / release branch] --> Release[release pipeline]
  Release --> Strategy{strategy}
  Strategy --> BlueGreen[blue-green: switch]
  Strategy --> Rolling[rolling: replace batch]
  Strategy --> Canary[canary: weight + metric]
  Strategy --> Flag[feature flag: runtime]
  Canary --> Analysis[AnalysisTemplate]
  Analysis --> Metric[Prometheus / Datadog]
  Metric --> Decision{pass?}
  Decision -- yes --> Promote[promote 100%]
  Decision -- no --> Abort[abort / rollback]
  Flag -.runtime toggle.-> Promote
  Promote --> Observability[DORA / audit]
  Abort --> Observability

核心关系:release 决定版本与时机,策略决定流量分配,metric 决定是否继续,feature flag 决定行为可见性。四个维度必须配合。

9.3 基础知识讲解

9.3.1 论文 / 规范

资料用法
semver.org 2.0.0语义化版本定义
Conventional Commits 1.0commit 类型 → version bump
Keep a Changelog 1.1changelog 格式
Argo Rollouts specCanary / BlueGreen CRD
OpenFeature specfeature flag vendor-neutral 抽象

9.3.2 书

资料用法
Humble & Farley, Continuous Delivery「部署与发布解耦」原则
Forsgren 等, AccelerateDORA 与渐进发布的统计关联
Ford, Building Evolutionary Architectures适应度函数 + canary

9.3.3 博客 / 文档

资料用法
Argo Rollouts 文档Canary / BlueGreen / AnalysisTemplate 主线
Flagger 文档对照 Argo Rollouts 的轻量选择
Spinnaker 文档多云 pipeline
release-pleaseGoogle 出品的版本自动化
semantic-releaseJS 生态对照
LaunchDarkly Blogfeature flag 工程实践
Unleash 文档开源 flag 服务
OpenFeature 文档vendor-neutral SDK

9.3.4 人物

人物关注点
Jez Humble部署与发布解耦
Charity Majorsobservability-driven rollout
Sam Newman微服务与独立可部署性
Adrian CockcroftSpinnaker / canary 早期实践

9.3.5 方法

方法动作
Decouple deploy vs release部署靠 canary,发布靠 flag
Metric-driven错误率 / P99 / saturation 自动门控
Always keep last-good蓝绿永远保留旧版本;canary 失败 abort
Feature flag lifecycleflag 必须有到期日,否则技术债
Runbook first先写回滚预案,再配发布按钮

9.4 经典问题与经典案例

#问题最简答案
1semver 1.0.0-rc.1 vs 1.0.0prerelease < release,工具按规则排序
2蓝绿切错版本,回滚反而快旧版本一直保留,点 switch 即回
3滚动回滚慢滚动是 batch 替换,回滚也要 batch;爆炸半径小但代价高
4canary 指标不达标,没人看AnalysisTemplate 接 Prometheus,failureThreshold + abort
5feature flag 永远不清理配 expiration date,CI 检查无主 flag
6tag 被覆盖用 force-with-lease / signed tag,禁止 force push
7release branch 长期不合并每周 rebase + 定期 merge back
8canary 跑完 100% 后再出问题留 soak 时间,分批 promote
9abort 触发但没人通知AnalysisRun 状态接 alertmanager
10flag 在客户端不生效SDK 缓存 + 长连接 / SSE 推送

9.5 学习难点

概念难点

难点为什么会卡突破路径
部署 vs 发布canary 是部署,flag 是发布部署 100% 完成不代表对用户可见
Tag vs digestmutable vs immutable部署用 digest
Prerelease 排序1.0.0-rc.1 < 1.0.0用 semver 工具

思维难点

难点为什么会卡突破路径
策略选择蓝绿、滚动、金丝雀各有权衡画爆炸半径 × 回滚时长 × 资源开销三维图
metric 选择错误率、P99、饱和度都重要选 2–3 个,业务结果驱动
flag 维度租户、用户、地区、版本与实验平台对齐

工程难点

难点为什么会卡突破路径
AnalysisTemplate 写错metric provider 不可达staging 先跑通,配 dry-run
flag SDK 性能SDK 调用阻塞 hot path本地缓存 + 异步 refresh
Spinnaker 复杂度pipeline + stage 模型学习曲线陡先 Argo Rollouts 入手
回滚演练production 不敢演练chaos drill 在 staging 跑,prod 用 game day

9.6 技术标准与接口

9.6.1 Entity

名称发布组织角色状态 / 可访问性
semver.orgsemver.org版本规范公开
Conventional Commitsconventionalcommits.orgcommit 规范公开
Argo RolloutsCNCF渐进发布Apache-2.0,活跃
FlaggerWeaveworks / Flux渐进发布Apache-2.0,活跃
SpinnakerOSS多云发布Apache-2.0,活跃
LaunchDarklyLaunchDarklyfeature flag SaaS商业
UnleashUnleashfeature flag OSSApache-2.0
OpenFeatureCNCFflag 抽象Apache-2.0
release-pleaseGoogle版本自动化Apache-2.0
semantic-releasesemantic-release版本自动化MIT
Keep a ChangelogOlivier Lacanchangelog 规范CC BY-SA

9.6.2 Scope

Argo Rollouts 在 Kubernetes 上提供 canary / blue-green;Flagger 依赖 service mesh(Istio / NGINX)做 metric gating;Spinnaker 是多云发布平台;release-please / semantic-release 自动 bump 与 changelog;feature flag 把发布与部署解耦。

9.6.3 Structure

Argo Rollouts CRD:Rollout(strategy + steps + trafficRouting)、AnalysisTemplate(metrics + thresholds)、AnalysisRun(单次执行)。Flagger CRD:Canary(provider + metrics)。Spinnaker pipeline:stages 序列。feature flag SDK:client + context + variation。

9.6.4 Ecosystem

Argo Rollouts 与 Argo CD 集成;Flagger 集成 Flux / Helm operator;Spinnaker 独立多云;release-please 与 GitHub Actions / release-please-action 集成;OpenFeature 提供 .NET / Go / Java / Node / Python SDK。

9.6.5 Depth Tiers

层级可观察能力
L0知道 semver、canary、blue-green、feature flag 是什么
L1能读 Rollout YAML、AnalysisTemplate、flag SDK 示例
L2能写 Canary YAML、配 feature flag SDK
L3能从 AnalysisRun 报告解释 abort,设计 metric-driven rollout
L4能设计多服务联动 rollout、跨 region canary、flag 实验平台

本子主题目标是 L3

9.6.6 Source

10. 常见误区

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

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

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

直接依赖(1)

查看知识图谱