目标
部署使用 latest 标签,结果两个环境在同一标签下运行了不同代码。本配方在构建时同时打上提交 SHA 标签并写入摘要,部署清单引用 SHA 标签,使线上运行的就是通过测试的那个提交;同时提醒回退应按摘要引用,并使用完整 SHA 与标签保留策略。
步骤要点
- 构建镜像并以提交 SHA 为标签推送到仓库。
- 读取镜像摘要用于审计与固定引用。
- 部署清单引用 SHA 标签而非 latest。
- 回退时按摘要引用,避免标签被覆盖。
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。
- 仓库标签过多需保留策略。
适用边界
- 本身不验证构建来源。
- 需要不可变标签或摘要引用。