fix: align ACR script with cabinet interface
This commit is contained in:
@@ -35,19 +35,23 @@ 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 <acr_password>
|
||||
# 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 <instance>-registry.<region>.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-frontend
|
||||
IMAGE_TAG default: git sha or timestamp
|
||||
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-frontend
|
||||
IMAGE_TAG default: YYYYMMDDHHMM
|
||||
PKG_MANAGER pnpm|npm (build-arg)
|
||||
NPM_REGISTRY custom npm registry (build-arg)
|
||||
ACR_USERNAME / ACR_PASSWORD if set, script will docker login before pushing
|
||||
DRY_RUN=1 print computed image ref and exit
|
||||
|
||||
Compatibility:
|
||||
REPO_URL -> ACR_REGISTRY
|
||||
@@ -61,6 +65,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
|
||||
@@ -68,29 +79,36 @@ 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-frontend}}"
|
||||
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-frontend}"
|
||||
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
|
||||
if [[ "${DRY_RUN:-}" == "1" ]]; then
|
||||
echo "DRY_RUN=1"
|
||||
echo "IMAGE_REF=$image_ref"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
build_args=()
|
||||
@@ -101,11 +119,20 @@ if [[ -n "${NPM_REGISTRY:-}" ]]; then
|
||||
build_args+=(--build-arg "NPM_REGISTRY=${NPM_REGISTRY}")
|
||||
fi
|
||||
|
||||
docker build \
|
||||
-f "$script_dir/Dockerfile" \
|
||||
-t "$image_ref" \
|
||||
"${build_args[@]}" \
|
||||
"$script_dir"
|
||||
if docker buildx version >/dev/null 2>&1; then
|
||||
docker buildx build \
|
||||
-f "$script_dir/Dockerfile" \
|
||||
-t "$image_ref" \
|
||||
--load \
|
||||
"${build_args[@]}" \
|
||||
"$script_dir"
|
||||
else
|
||||
docker build \
|
||||
-f "$script_dir/Dockerfile" \
|
||||
-t "$image_ref" \
|
||||
"${build_args[@]}" \
|
||||
"$script_dir"
|
||||
fi
|
||||
|
||||
docker push "$image_ref"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user