SDD + Harness 四周学习计划 · Week 3 · Day 17(工程化闭环第 3 课 / 全计划第 17 课)
今日主题:持续交付中的 Harness:CI/CD、金丝雀/蓝绿发布、Feature Flags、质量门禁、自动回滚
建议用时:60–90 分钟 | 前置:Day 16 规范即测试
输出物:一张「从 commit 到生产」的发布流水线图(自己画)+ 质量门禁五步清单
0. 一句话剧透
Day 16 说「规范即测试」——测试天然就是 CI/CD 里的门禁。今天把 Harness 从开发期护栏延伸到发布期护栏:CI/CD 把测试自动跑起来,蓝绿/金丝雀把发布变成可回退的渐进过程,Feature Flags 把「配置即发布」变成日常,质量门禁把不达标的版本挡在生产外,指标一异常就自动回滚。Harness 不再只管写代码的过程,开始管交付的全过程。
1. 今日目标(学完你能做到)
- 能画出/说出 CI/CD 从 commit 到生产的完整链路
- 能区分金丝雀发布与蓝绿发布,各说一个适用场景
- 能说出 Feature Flags 能「配置即发布」什么(模型版本 / Prompt 模板 / 推理参数)
- 能背出质量门禁的五步流程(lint+spec 校验 → 契约测试 → 烟雾测试 → 金丝雀验证 → 生产前人工 approval)
- 能解释自动回滚的触发条件(指标异常 → 回退上一稳定版本)
- 完成动手练:画自己的发布流水线图
2. 学习动线(建议时间分配)
| 步骤 | 内容 | 用时 |
|---|---|---|
| 1 | 第 3 节:从开发护栏到发布护栏(衔接 Day 16) | 10 分钟 |
| 2 | 第 4 节:发布策略三件套(蓝绿 / 金丝雀 / Feature Flags) | 25 分钟 |
| 3 | 第 5 节:质量门禁五步 + 文中数据 | 20 分钟 |
| 4 | 第 6 节:自动回滚 | 10 分钟 |
| 5 | 动手练(第 7 节):画流水线图 | 15 分钟 |
| 6 | 自测(第 8 节) | 10 分钟 |
3. 从开发护栏到发布护栏
Week 2 的 Harness 管「代码怎么被写出来」:pre-commit hook 拦下没写 spec 的提交、Plan Mode 约束执行。但代码写完只是开始——怎么安全地把它送到生产? 这就是持续交付中的 Harness。
关键前提来自 Day 16:测试是从规范生成的(规范即测试),所以 CI/CD 可以放心用测试当门禁——测试通过 ≈ 实现符合规范,这个判断是自动化的、可重复的,不需要靠人肉 review。没有这层地基,CI/CD 只是「把不可靠的测试跑一遍」。
4. 发布策略三件套
已核验素材:蓝绿发布、金丝雀发布(如 10% 流量 30 分钟对比指标)、Feature Flags(配置即发布:模型版本 / Prompt 模板 / 推理参数)。
4.1 蓝绿发布
两套环境并行:蓝色(旧版本)和绿色(新版本)同时在线,流量整体切换。切换前绿色环境已完整验证,切换瞬间完成;出问题切回蓝色即可。
- 优点:切换快、回滚快、版本间无灰度混合。
- 代价:需要双倍资源(两套环境同时跑)。
4.2 金丝雀发布
渐进放量:先让新版本接收一小部分流量(如 10%),观察 30 分钟对比指标,确认没问题再逐步放量到 100%。
- 优点:风险可控,用真实流量验证,出问题只影响少数用户。
- 典型做法(已核验示例):10% 流量 + 30 分钟指标对比。
4.3 Feature Flags(特性开关)
配置即发布:新功能默认关在开关后面,通过配置打开/关闭,不重新部署也能发布/回滚功能。对 AI 应用尤其关键——模型版本、Prompt 模板、推理参数都可以作为开关配置项,随时切换。
三者关系:蓝绿/金丝雀解决「代码版本怎么上线」,Feature Flags 解决「功能怎么开关」——可以组合使用。
5. 质量门禁:发布路上的五道检查
已核验的质量门禁流程(五步):
1
commit → ① lint + spec 校验 → ② 契约测试 → ③ 烟雾测试 → ④ 金丝雀验证 → ⑤ 生产前人工 approval → 上线
| 门禁 | 卡什么 | 呼应哪一天 |
|---|---|---|
| ① lint + spec 校验 | 代码风格 + 规范本身是否合法 | Day 15 契约 / Week 2 hooks |
| ② 契约测试 | 实现是否符合契约(规范即测试) | Day 16 |
| ③ 烟雾测试 | 主路径能不能跑通 | Day 18 实操 |
| ④ 金丝雀验证 | 真实流量下的指标对比 | 本日 4.2 |
| ⑤ 人工 approval | 上线前最后一道人眼确认 | 团队流程 |
文中量化成果(已核验):契约测试 1000+ 用例、错误率 <0.1%——门禁不是摆设,是真实把错误率压下来的机制。
6. 自动回滚:最后一道安全网
即使过了五道门禁,生产环境仍可能出意外。自动回滚:部署后持续监控指标,指标异常时自动回退到上一稳定版本,不等人工介入。
与蓝绿发布配合最顺:切回蓝色环境即完成回滚;与金丝雀配合:发现异常先斩流量再回退。回滚是发布策略的一部分,不是事故后的补救。
7. 动手练(约 15 分钟)
画一张你自己的「从 commit 到生产」发布流水线图(ASCII 或文字箭头均可),要求包含:CI 阶段(lint + spec 校验 → 契约测试 → 烟雾测试)、发布阶段(金丝雀 / 蓝绿任选)、Feature Flags 开关、自动回滚触发点。存为 Week3-Day17-发布流水线.md,Day 21 周复盘要用。
参考画法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
commit
│
▼
① lint + spec 校验 ──失败──▶ 打回(修 spec/代码)
│
▼
② 契约测试 ──失败──▶ 打回
│
▼
③ 烟雾测试 ──失败──▶ 打回
│
▼
④ 金丝雀验证(10% 流量 30 分钟对比指标)──异常──▶ 自动回滚到上一稳定版本
│ 正常
▼
⑤ 人工 approval → 全量上线
│
▼
Feature Flags 随时开关新功能 / 切换模型版本·Prompt 模板·推理参数
8. 自测题
- 为什么「规范即测试」是 CI/CD 门禁能成立的前提?
- 蓝绿发布和金丝雀发布的区别?各适合什么场景?
- 文中金丝雀发布的示例参数是什么?
- Feature Flags 能配置即发布哪些东西(AI 应用场景)?
- 质量门禁五步的顺序是什么?
- 自动回滚的触发条件和动作是什么?
- lint+spec 校验和契约测试各自卡什么?
答案与提示:
- 测试从规范生成、规范改动自动更新测试,所以「测试通过 ≈ 实现符合规范」是自动且可重复的判断,门禁才可信。
- 蓝绿:两套环境整体切换,回滚快但费资源;金丝雀:渐进放量用真实流量验证,风险小但过程长。
- 10% 流量、30 分钟对比指标。
- 模型版本、Prompt 模板、推理参数。
- lint+spec 校验 → 契约测试 → 烟雾测试 → 金丝雀验证 → 生产前人工 approval。
- 指标异常 → 自动回退到上一稳定版本。
- lint+spec 校验卡「代码风格与规范是否合法」;契约测试卡「实现是否符合契约」。
延伸阅读
- 腾讯云《SDD 规范驱动 + Harness:AI 全栈开发从「能跑」到「可控」》(发布策略与门禁出处):https://cloud.tencent.com/developer/article/2703349
- 掘金《AI 编程可闭环协作·卷三:Harness 与 SDD》(合并前自动检查等协作机制):https://juejin.cn/post/7647333934796537919
本工作纸依据《SDD+Harness四周学习计划.md》Day 17 主题编制。整理日期:2026-09-09