Docker Build Tag Push Healthcheck
Script a full container release flow: build with cache pins, tag by digest and git SHA, push, and wait for registry health.
Code
#!/usr/bin/env bash
set -euo pipefail
readonly REGISTRY="registry.example.com"
readonly IMAGE="${REGISTRY}/billing-api"
readonly GIT_SHA="$(git rev-parse --short=12 HEAD)"
die() { echo "Error: $*" >&2; exit 1; }
command -v docker >/dev/null || die "docker 未安装"
git diff --quiet || die "工作区不干净,先提交再发布"
build() {
echo "构建 ${IMAGE}:${GIT_SHA}"
docker build \
--build-arg GIT_COMMIT="${GIT_SHA}" \
--label "org.opencontainers.image.revision=${GIT_SHA}" \
--label "org.opencontainers.image.created=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
-t "${IMAGE}:${GIT_SHA}" \
-t "${IMAGE}:latest" \
.
}
push_and_verify() {
docker push "${IMAGE}:${GIT_SHA}"
docker push "${IMAGE}:latest"
local digest
digest=$(docker inspect --format '{{index .RepoDigests 0}}' \
"${IMAGE}:${GIT_SHA}" | cut -d@ -f2)
echo "已推送: ${IMAGE}@${digest}"
# registry 健康探测:清单可拉取才算发布完成
local attempt=0
until docker manifest inspect "${IMAGE}:${GIT_SHA}" >/dev/null 2>&1; do
(( attempt++ )) || true
(( attempt < 5 )) || die "manifest 未就绪,registry 可能异常"
sleep 3
done
echo "发布完成:${GIT_SHA}"
}
build
push_and_verify
Report a problem with this exampleOpens a pre-filled issue on GitHub.