Files
arcticnewone/build-and-push.sh
T

65 lines
2.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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}"