From 82c71f26d4a3c2cca21a100bfb107b9e0676ef4e Mon Sep 17 00:00:00 2001 From: aipper Date: Sun, 1 Mar 2026 20:26:36 +0800 Subject: [PATCH] fix: align ACR script with cabinet interface --- build-push-acr.sh | 80 +++++++++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 27 deletions(-) diff --git a/build-push-acr.sh b/build-push-acr.sh index a0c1802..2595930 100755 --- a/build-push-acr.sh +++ b/build-push-acr.sh @@ -35,17 +35,21 @@ load_env_file() { usage() { cat <<'EOF' >&2 Usage: - ACR_REGISTRY=... ACR_NAMESPACE=... [ACR_USERNAME=... ACR_PASSWORD=...] bash build-push-acr.sh + bash build-push-acr.sh + # or: + ACR_PASSWORD=... ACR_USERNAME=... REPO_URL=... NAMESPACE=... REPO_NAME=... IMAGE_TAG=... bash build-push-acr.sh Required: - ACR_REGISTRY e.g. registry.cn-hangzhou.aliyuncs.com OR -registry..cr.aliyuncs.com - ACR_NAMESPACE your namespace + acr_password (positional arg #1) OR env ACR_PASSWORD Optional: ENV_FILE env file to load (default: ../deploy/.env if exists) - IMAGE_REPO default: digital-archive-server - IMAGE_TAG default: git sha or timestamp - ACR_USERNAME / ACR_PASSWORD if set, script will docker login before pushing + ACR_USERNAME if set (recommended), script will docker login before pushing + REPO_URL registry host (ACR). Default: registry.cn-hangzhou.aliyuncs.com + NAMESPACE ACR namespace. Default: aipper + REPO_NAME repository name. Default: digital-archive-server + IMAGE_TAG default: YYYYMMDDHHMM + DRY_RUN=1 print computed image ref and exit Compatibility: REPO_URL -> ACR_REGISTRY @@ -59,6 +63,13 @@ else load_env_file "$script_dir/../deploy/.env" fi +if [[ -z "${ACR_PASSWORD:-}" && -n "${1:-}" ]]; then + export ACR_PASSWORD="$1" +fi +if [[ -z "${ACR_USERNAME:-}" && -n "${2:-}" ]]; then + export ACR_USERNAME="$2" +fi + if [[ -z "${ACR_REGISTRY:-}" && -n "${REPO_URL:-}" ]]; then export ACR_REGISTRY="$REPO_URL" fi @@ -66,35 +77,50 @@ if [[ -z "${ACR_NAMESPACE:-}" && -n "${NAMESPACE:-}" ]]; then export ACR_NAMESPACE="$NAMESPACE" fi -if [[ -z "${ACR_REGISTRY:-}" || -z "${ACR_NAMESPACE:-}" ]]; then - echo "Missing required env: ACR_REGISTRY and/or ACR_NAMESPACE" >&2 +export REPO_URL="${REPO_URL:-${ACR_REGISTRY:-registry.cn-hangzhou.aliyuncs.com}}" +export NAMESPACE="${NAMESPACE:-${ACR_NAMESPACE:-aipper}}" +export REPO_NAME="${REPO_NAME:-${IMAGE_REPO:-digital-archive-server}}" +export IMAGE_TAG="${IMAGE_TAG:-$(date +"%Y%m%d%H%M")}" + +export ACR_REGISTRY="${ACR_REGISTRY:-$REPO_URL}" +export ACR_NAMESPACE="${ACR_NAMESPACE:-$NAMESPACE}" +export IMAGE_REPO="${IMAGE_REPO:-$REPO_NAME}" + +if [[ -z "${ACR_PASSWORD:-}" ]]; then + echo "错误:请在运行脚本时传递密码,例如:bash build-push-acr.sh your-acr-password" >&2 usage - exit 2 + exit 1 fi -image_repo="${IMAGE_REPO:-digital-archive-server}" -image_tag="${IMAGE_TAG:-}" - -if [[ -z "$image_tag" ]]; then - if command -v git >/dev/null 2>&1; then - image_tag="$(git -C "$script_dir" rev-parse --short HEAD 2>/dev/null || true)" - fi -fi - -if [[ -z "$image_tag" ]]; then - image_tag="$(date +%Y%m%d%H%M%S)" -fi +image_repo="$IMAGE_REPO" +image_tag="$IMAGE_TAG" image_ref="${ACR_REGISTRY}/${ACR_NAMESPACE}/${image_repo}:${image_tag}" -if [[ -n "${ACR_USERNAME:-}" && -n "${ACR_PASSWORD:-}" ]]; then - printf '%s' "$ACR_PASSWORD" | docker login "$ACR_REGISTRY" -u "$ACR_USERNAME" --password-stdin +if [[ "${DRY_RUN:-}" == "1" ]]; then + echo "DRY_RUN=1" + echo "IMAGE_REF=$image_ref" + exit 0 fi -docker build \ - -f "$script_dir/Dockerfile" \ - -t "$image_ref" \ - "$script_dir" +if [[ -n "${ACR_USERNAME:-}" ]]; then + printf '%s' "$ACR_PASSWORD" | docker login "$ACR_REGISTRY" -u "$ACR_USERNAME" --password-stdin +else + echo "提示:未设置 ACR_USERNAME,将跳过 docker login(若你本机已登录则可继续 push)" >&2 +fi + +if docker buildx version >/dev/null 2>&1; then + docker buildx build \ + -f "$script_dir/Dockerfile" \ + -t "$image_ref" \ + --load \ + "$script_dir" +else + docker build \ + -f "$script_dir/Dockerfile" \ + -t "$image_ref" \ + "$script_dir" +fi docker push "$image_ref"