提交散列版本是什么
用 commit SHA(常取前 7-12 位)标识构建来源:全球唯一,无法伪造成另一个提交,适合内部构建与镜像标签。它表达「哪个源码状态」而不表达兼容性,不能排序、不区分轻重缓急。生产实践是「语义版本标签 + SHA 标签」双轨:对外可读、对内精确溯源。
基本信息
| 形式 | gabc1234 / 完整 40 位 SHA |
|---|---|
| 平台变量 | GitLab $CI_COMMIT_SHORT_SHA;GitHub ${{ github.sha }} |
| 特点 | 唯一但不排序、不表达兼容性,仅作溯源标识 |
| 双轨建议 | 语义版本标签 + SHA 标签并存,各司其职 |
| 不可变性 | SHA 标签一旦推送即视为不可变,禁止覆盖 |
典型使用场景
- 内部构建:镜像与二进制制品按 SHA 打标签
- 问题溯源:从运行版本反查对应源码提交
- 回滚定位:核对回滚目标对应哪个提交
- 审计链:制品标签、构建日志与提交互相印证
- 多服务联调:用 SHA 表达各服务联合版本
打标签
打标签
docker build -t registry.example.com/app:sha-$(git rev-parse --short HEAD) .
# 完整 SHA 变量(GitLab)
echo $CI_COMMIT_SHA
# GitHub Actions
echo ${{ github.sha }}标签形式对照
| 标签形式 | 含义 | 用途 |
|---|---|---|
| v1.8.0 | 语义版本 | 对外沟通与升级决策 |
| sha-9f2c1ab | 提交标识 | 内部溯源与精确引用 |
| latest | 浮动指针 | 仅辅助,不用于生产 |
| digest | 内容寻址 | 最强的不可变引用 |
生产环境建议「语义版本标签 + SHA 标签」双轨:对外可读、对内精确。
短 SHA 长度按团队与仓库活跃度选取:唯一即可,7 到 12 位都常见。
实践要点
- 构建注入:把 SHA 与构建号写进制品元数据与环境变量
- 镜像多标签:同一镜像同时打语义版本与 sha 两组标签
- 展示分层:界面显示语义版本,排障视图显示 SHA
- 日志带版本:启动时打印版本与 SHA,便于对齐
- 保留策略:按 sha 留构建历史,按 semver 留交付版本
从 SHA 反查提交依赖完整仓库历史:浅克隆与归档仓库要保留索引,否则查不到。