ci: add multi-arch dev image build script

- deploy/docker/build-dev.sh + make image-dev: linux/amd64+arm64 build & push,
  dev/dev-<sha>/dev-<date> tags, registry inline cache, auto create buildx builder
- PUSH=0 falls back to host-arch build with --load for local verification
- verified end-to-end (PUSH=0): container frontend build, CGO-free cross compile,
  upx pack 31.7MB->11.8MB, image smoke test 200
This commit is contained in:
Sakurasan
2026-08-30 02:11:11 +08:00
parent 33f5e7b71a
commit 963da99fd6
3 changed files with 61 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env sh
# 构建 dev 镜像:默认多平台(amd64/arm64)并推送,PUSH=0 时按本机架构构建并加载到本地
#
# 用法:
# sh deploy/docker/build-dev.sh # 多平台构建并推送 dev 标签
# PUSH=0 sh deploy/docker/build-dev.sh # 本机架构构建 --load,仅本地
# REGISTRY_IMAGE=demo/openteam PLATFORMS=linux/amd64 sh deploy/docker/build-dev.sh
set -e
cd "$(dirname "$0")/../.."
REGISTRY_IMAGE=${REGISTRY_IMAGE:-mirrors2/opencatd-open}
PLATFORMS=${PLATFORMS:-linux/amd64,linux/arm64}
BUILDER=${BUILDER:-xbuilder}
PUSH=${PUSH:-1}
DOCKERFILE=${DOCKERFILE:-deploy/docker/Dockerfile}
SHORT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo unknown)
DATE_TAG=$(date +%Y%m%d)
# 确保 buildx 容器构建器存在(默认 docker driver 不支持多平台)
docker buildx inspect "$BUILDER" >/dev/null 2>&1 || docker buildx create --name "$BUILDER" --driver docker-container >/dev/null
TAGS="-t $REGISTRY_IMAGE:dev -t $REGISTRY_IMAGE:dev-$SHORT_SHA -t $REGISTRY_IMAGE:dev-$DATE_TAG"
if [ "$PUSH" = "1" ]; then
echo ">>> 多平台构建并推送: $PLATFORMS"
# shellcheck disable=SC2086
docker buildx build \
--builder "$BUILDER" \
--platform "$PLATFORMS" \
$TAGS \
--cache-from type=registry,ref="$REGISTRY_IMAGE:dev" \
--cache-to type=inline \
-f "$DOCKERFILE" \
. --push
echo ">>> 已推送: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)"
else
HOST_ARCH=$(docker version -f '{{.Server.Arch}}')
echo ">>> 本机架构构建并加载: linux/$HOST_ARCH"
docker buildx build \
--builder "$BUILDER" \
--platform "linux/$HOST_ARCH" \
$TAGS \
-f "$DOCKERFILE" \
. --load
echo ">>> 已加载本地镜像: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)"
fi