← 中文资源

简体中文版本

发布候选签署工作流

把同一个候选分发到 QA、安全、产品、运维的分阶段签署,逐项作为最终打标前的门禁追踪。

阅读英文原文

目标

“我觉得没问题”式的意见一旦挂在分支而不是产物上就会退化为噪音。本工作流把每个签署绑定到同一个产物哈希,按顺序分阶段让每位评审者继承已验证的候选,最终 tag 只发布所有人真正批准过的那个哈希,且每道门都有可回溯的证据。

步骤要点

  1. 从 tag 构建唯一的 RC 产物并登记进发布清单,所有评审者引用同一哈希而非各自本地构建。
  2. 按序分阶段签署:QA 验证、安全扫描、产品验收、运维部署演练,每道门记录通过或阻断及证据链接。
  3. 每道门必须附证据:测试运行 ID、扫描报告、验收笔记或演练日志,无证据不得标记批准。
  4. 阻断后修复:先落 main 再 cherry-pick 出新 RC,从被阻断的门重启签署链,改动可证局部时早前通过的门可结转。
  5. 全部门对同一哈希变绿才提升为正式 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)