目标
“我觉得没问题”式的意见一旦挂在分支而不是产物上就会退化为噪音。本工作流把每个签署绑定到同一个产物哈希,按顺序分阶段让每位评审者继承已验证的候选,最终 tag 只发布所有人真正批准过的那个哈希,且每道门都有可回溯的证据。
步骤要点
- 从 tag 构建唯一的 RC 产物并登记进发布清单,所有评审者引用同一哈希而非各自本地构建。
- 按序分阶段签署:QA 验证、安全扫描、产品验收、运维部署演练,每道门记录通过或阻断及证据链接。
- 每道门必须附证据:测试运行 ID、扫描报告、验收笔记或演练日志,无证据不得标记批准。
- 阻断后修复:先落 main 再 cherry-pick 出新 RC,从被阻断的门重启签署链,改动可证局部时早前通过的门可结转。
- 全部门对同一哈希变绿才提升为正式 tag,发布元数据记录签署者、门禁与证据集合。
排错提示
有人基于旧哈希签了名说明清单没锁哈希,把哈希写进签署表头并让平台校验引用;阻断后全员重跑拖慢节奏,用受影响团队确认范围的结转机制,跨域改动仍全量重启;豁免越用越多说明门禁太粗,重新划分阶段而不是放宽豁免,安全门任何时候不可豁免。
适用边界
分阶段签署以串行为代价换取继承性,紧急热修可走并行签署但需事后补录证据;结转依赖人对范围的判断,误判会把未验证的变更送上线,宁可保守。
代码示例
RC2 sha256:9f21c... gates:
QA PASS run #4821 (regression 412/412)
Security PASS scan 2026-10-21 (0 high)
Product PASS acceptance notes v1.8
Ops PASS rehearsal log (staging deploy 11m)
------------------------------
FINAL TAG v1.8.0 -> sha256:9f21c...
RC3 (fix for QA block) sha256:44be0...
QA PASS run #4837 <- rerun
Security CARRY (confirmed in-scope)
Product CARRY
Ops RERUN (deploy touched)