← 中文资源

简体中文版本

用 Git SHA 标记容器镜像

用不可变的提交 SHA 与摘要标记镜像,使部署引用确定产物而非浮动标签。

阅读英文原文

目标

部署使用 latest 标签,结果两个环境在同一标签下运行了不同代码。本配方在构建时同时打上提交 SHA 标签并写入摘要,部署清单引用 SHA 标签,使线上运行的就是通过测试的那个提交;同时提醒回退应按摘要引用,并使用完整 SHA 与标签保留策略。

步骤要点

  1. 构建镜像并以提交 SHA 为标签推送到仓库。
  2. 读取镜像摘要用于审计与固定引用。
  3. 部署清单引用 SHA 标签而非 latest。
  4. 回退时按摘要引用,避免标签被覆盖。
docker buildx build --push \
  -t ghcr.io/org/app:${GITHUB_SHA} \
  -t ghcr.io/org/app:latest .
docker buildx imagetools inspect ghcr.io/org/app:${GITHUB_SHA} | grep Digest

排错提示

  • 回退若引用被覆盖的标签会拿到错误代码。
  • 短 SHA 理论上可能碰撞,应使用完整 SHA。
  • 仓库标签过多需保留策略。

适用边界

  • 本身不验证构建来源。
  • 需要不可变标签或摘要引用。