← 中文资源

简体中文版本

跨环境制品晋级工作流

一次构建,同一制品经开发、预发、生产逐级晋级,每次晋级只挪元数据绝不重建。

阅读英文原文

目标

为每个环境重新构建,等于把测试刚排除掉的所有不确定性重新请回来:依赖漂移、编译差异、时钟差异。改为晋级一个不可变的摘要,环境晋级就变成不可能改变行为的元数据操作——预发通过的与生产部署的,在字节层面必然相同。

步骤要点

  1. 从打标的提交构建唯一产物,把摘要、构建链接、测试结果作为不可变元数据附在产物上。
  2. 所有环境流水线改为按注册表摘要部署,弃用可变 tag 或分支名引用。
  3. 每次晋级设门:进预发前过集成测试,进生产前过签署,门禁证据入审计日志。
  4. 晋级即移动指针:把环境指针(channel 或 tag)推进到已验证摘要,绝不重建也绝不在既有产物上重打标。
  5. 生产部署后比对已部署摘要与预发批准摘要,不一致立即告警。

排错提示

生产摘要与预发不一致几乎总是某处仍在重建,搜流水线里的 build 步骤并改为 digest 引用;配置被烙进产物字节是因为构建参数混入了环境值,把环境差异全部外置为部署时注入;审计日志缺 actor 说明有人手工挪了指针,收回直接写注册表的权限并走晋级 API。

适用边界

本流程要求注册表支持不可变摘要与指针,可变 tag 体系要先改造;按摘要部署后回滚也是指针操作,速度取决于注册表而非构建队列,容量规划要相应调整。

代码示例

registry: app@sha256:9f21c4...
  build:   run #4821 (tag v1.8.0, commit 7ab3e1)
  tests:   412/412 green

pointers (promotion = pointer move):
  dev      -> sha256:9f21c4...   (auto after green)
  staging  -> sha256:9f21c4...   (after integration suite)
  prod     -> sha256:9f21c4...   (after sign-offs)

audit: staging->prod by ops@team, gate: release-checklist #88, 14:02Z