chore: 新增 build-and-push.sh 镜像构建推送脚本并更新文档

This commit is contained in:
2026-08-04 06:17:39 +08:00
parent 40faf4a4c9
commit a267f66079
3 changed files with 87 additions and 4 deletions
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
# =========================================================
# Arcticnewone 镜像构建与推送脚本(本地 / 部署服务器手动执行)
#
# 遵循团队部署规范:
# - 镜像推送到华为云 SWRtag 固定为 latest
# - 多架构构建推送:linux/amd64,linux/arm64
# - 登录凭据一律从环境变量读取,绝不写入仓库
#
# 使用前先设置环境变量(示例):
# export SWR_REGISTRY="swr.cn-north-4.myhuaweicloud.com"
# export SWR_NAMESPACE="virtheart"
# export SWR_USERNAME="<SWR 用户名>"
# export SWR_PASSWORD="<SWR 密码>"
# 然后执行:
# ./build-and-push.sh
# =========================================================
set -euo pipefail
# 必填环境变量校验(缺失即报错退出)
: "${SWR_REGISTRY:?请先设置环境变量 SWR_REGISTRY(例如 swr.cn-north-4.myhuaweicloud.com}"
: "${SWR_NAMESPACE:?请先设置环境变量 SWR_NAMESPACE(例如 virtheart}"
: "${SWR_USERNAME:?请先设置环境变量 SWR_USERNAMESWR 登录用户名)}"
: "${SWR_PASSWORD:?请先设置环境变量 SWR_PASSWORDSWR 登录密码)}"
IMAGE_NAME="arcticnewone"
IMAGE_TAG="latest"
FULL_IMAGE="${SWR_REGISTRY}/${SWR_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}"
PLATFORMS="linux/amd64,linux/arm64"
BUILDER_NAME="multiarch-builder"
# 前置检查:docker 与 buildx
if ! command -v docker >/dev/null 2>&1; then
echo "错误: 未找到 docker 命令,请先安装 Docker" >&2
exit 1
fi
if ! docker buildx version >/dev/null 2>&1; then
echo "错误: 未找到 docker buildx,请启用 BuildxDocker 20.10+ 默认内置)" >&2
exit 1
fi
# 1. 登录 SWR(凭据来自环境变量,不写入仓库)
echo ">>> [1/4] 登录 SWR: ${SWR_REGISTRY}"
echo "${SWR_PASSWORD}" | docker login "${SWR_REGISTRY}" -u "${SWR_USERNAME}" --password-stdin
# 2. 确保支持多架构的 builder 存在
echo ">>> [2/4] 准备多架构 builder: ${BUILDER_NAME}"
if ! docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then
docker buildx create --name "${BUILDER_NAME}" --use
else
docker buildx use "${BUILDER_NAME}"
fi
# 3. 多架构构建并推送
echo ">>> [3/4] 构建并推送: ${FULL_IMAGE} (${PLATFORMS})"
docker buildx build \
--platform "${PLATFORMS}" \
--push \
-t "${FULL_IMAGE}" \
.
# 4. 输出推送结果
echo ">>> [4/4] 推送完成,镜像摘要如下:"
docker buildx imagetools inspect "${FULL_IMAGE}"