首页/开发/CI/CD 与发布速查/标签不可变策略(仓库侧)
构建与制品管理58 条

标签不可变策略(仓库侧)

在仓库开启标签不可变(如 ECR tag immutability、Harbor 标签规则):从制度层面阻止「同标签覆盖」,保证引用可信。

CI/CD 与发布速查开发更新于 2026-10-13

标签不可变策略是什么

在仓库开启标签不可变(ECR 的 tag immutability、Harbor 标签不可变规则等):从制度层面阻止同标签覆盖重推,保证「某标签指向的内容永远一致」。这是可回滚与可追溯的前提——回滚引用旧标签时,内容不会被悄悄替换成别的构建。它不改变权限模型,只堵住覆盖这条路;删除与保留仍由权限与清理策略管理。

基本信息

平台ECR 支持 tag immutability;Harbor 有标签不可变规则
效果同 tag 重推直接失败或被拒绝
配合发布流程改用新版本号 + 新标签
特例滚动标签(stable/latest)需明确其可变语义
启用节奏先在试点仓库验证老流程兼容性再推广

典型使用场景

  • 生产镜像仓库:防止同标签被覆盖
  • 合规审计:引用某标签可证明当时内容
  • 可信回滚:旧标签内容与当时完全一致
  • 多团队共享仓库:防止他人误重推覆盖
  • 滚动交付:stable 滚动标签 + 不可变版本标签组合
  • 验收标准:交付说明里以不可变版本标签为准,沉淀成发布规范,供审计引用

影响与替代

影响与替代
开启后:
- 修 bug → 发新版本(1.8.1),不重推 1.8.0
- 需要移动指针 → 用单独的滚动标签(如 stable)并明确其可变语义
- 老流程若依赖重推:先改发布脚本再切换,否则流水线直接失败

平台对照

平台机制注意
ECRtag immutability 开关按仓库粒度设置
Harbor标签不可变规则项目级配置
Docker registry无内建开关靠流程与清理策略约束
不可变是「可回滚」的前提:回滚引用旧标签能确保内容一致。
小步启用:先从生产仓库试点,跑完一个发布周期确认流程顺畅再推广,转换期保留回退方案,出现阻断再回退不丢人。

易错点

  • 先在测试项目验证:老流程若依赖重推会立即失败,提前排期切换
  • 可变标签(stable)无审计:变更记录要点名到不可变版本,避免指来指去
  • 认为开了不可变就万无一失:标签仍可被删除后重建,配合删除权限与保留策略
  • 发布脚本总拉 latest:绕过不可变语义,脚本应指向版本标签
  • 启用前不盘点工具链:扫描器、回滚脚本可能依赖重推,逐项确认后切换

数据来源与参考

  • AWS ECR 文档(Tag immutability)
  • Harbor 文档(Tag immutability)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌