Files
arcticnewone/build-and-push.sh
T

50 lines
2.1 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(服务器主流架构;SWR 不支持 buildx 多架构 OCI manifest
# - --provenance=false 禁用 SLSA 证明,避免额外 manifest 导致 SWR 解析失败
# - docker build + docker push 分步执行,与 SWR 兼容性更好
# - 登录凭据一律从环境变量读取,绝不写入仓库
#
# 使用前先设置环境变量(示例):
# 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}"
# 前置检查:docker
if ! command -v docker >/dev/null 2>&1; then
echo "错误: 未找到 docker 命令,请先安装 Docker" >&2
exit 1
fi
# 1. 登录 SWR(凭据来自环境变量,不写入仓库)
echo ">>> [1/3] 登录 SWR: ${SWR_REGISTRY}"
echo "${SWR_PASSWORD}" | docker login "${SWR_REGISTRY}" -u "${SWR_USERNAME}" --password-stdin
# 2. 构建 linux/amd64 镜像(禁用 provenance,产物为单一 manifest
echo ">>> [2/3] 构建镜像: ${FULL_IMAGE} (linux/amd64)"
docker build --platform linux/amd64 --provenance=false -t "${FULL_IMAGE}" .
# 3. 推送镜像
echo ">>> [3/3] 推送镜像: ${FULL_IMAGE}"
docker push "${FULL_IMAGE}"
echo ">>> 推送完成: ${FULL_IMAGE}"