核心是采用语义化版本(semver 2.0)打标,禁用 latest,叠加环境或构建信息形成可追溯、不可变、易筛选的标签体系:生产镜像必须为 vmajor.minor.patch 格式(如 v2.1.4),major 表示不兼容变更,minor 表示兼容新增功能,patch 表示仅 bug 或安全修复;彻底禁用 latest,改用显式版本或经审批的 stable;支持多维组合标签如 v1.3.0-prod、v1.3.0-git-7f3a1b2、v1.3.0-build-20260721-1422 等;通过 ci 自动化打标,监听 git tag 触发构建并一次推送多个关联标签,便于在 harbor/ecr 中按前缀筛选。

核心是用语义化版本(SemVer)打标,禁用 latest,再叠加环境或构建信息形成可追溯、不可变、易筛选的标签体系。
坚持 SemVer 2.0 格式
所有生产镜像必须使用 vMAJOR.MINOR.PATCH 形式,比如 v2.1.4,每个字段有明确含义:
- MAJOR:发生不兼容变更时递增(如 API 删除、数据库 schema 重构)
- MINOR:新增向后兼容功能时递增(如加新接口、支持新配置项)
- PATCH:仅修复 bug 或安全补丁时递增(不引入新行为)
生产环境彻底禁用 latest
latest 不是版本,是漂移标签,会导致部署不可复现。正确做法:
- CI 流水线中不推送
latest到生产仓库 - K8s Deployment 或 Helm Chart 中明确写死
image: myapp:v1.3.0 - 如需稳定别名,可用
stable,但必须由人工审批或自动化流程显式更新,禁止自动覆盖
多维度组合标签提升可追溯性
单一版本号不够,可叠加标识,但不破坏 SemVer 主干:
-
v1.3.0-prod:经生产验证的同一镜像,用于 prod 环境拉取 -
v1.3.0-git-7f3a1b2:绑定 Git 提交哈希,确保镜像与源码严格一致 -
v1.3.0-build-20260721-1422:嵌入构建时间戳,便于定位问题时段 -
v1.3.0-rc.2:预发布候选版,用于 staging 环境灰度
自动化打标代替手动操作
避免手输错误,把打标逻辑集成进 CI:
- 监听 Git tag 推送(如
v1.3.0),触发构建并自动打标 - 用
git describe --tags生成带偏移的版本(如v1.3.0-2-g7f3a1b2) - 构建成功后,一次推送多个关联标签:
v1.3.0、v1.3.0-prod、v1.3.0-git-xxx - 在 Harbor 或 ECR 中,可通过前缀快速筛选(如查所有
v1.3.*或*-prod)











