#!/usr/bin/env bash # 本地构建 UserBase 前后端镜像并推送到阿里云 ACR # 用法: ./build-push.sh [app_tag] [front_tag] # 前置环境变量: ACR_NAMESPACE, ACR_USERNAME, ACR_PASSWORD # 前置产物: service/target/userbase.jar、front/dist/prod/ set -euo pipefail APP_VERSION="${1:-${APP_VERSION:-userbase-v1.0}}" FRONT_VERSION="${2:-${FRONT_VERSION:-userbase-front-v1.0}}" REGISTRY="${ACR_REGISTRY:-registry.cn-hangzhou.aliyuncs.com}" NAMESPACE="${ACR_NAMESPACE:?请设置 ACR_NAMESPACE}" REPO="${ACR_REPO:-yunhai}" APP_IMG="$REGISTRY/$NAMESPACE/$REPO:$APP_VERSION" FRONT_IMG="$REGISTRY/$NAMESPACE/$REPO:$FRONT_VERSION" ROOT="$(cd "$(dirname "$0")/.." && pwd)" [ -f "$ROOT/service/target/userbase.jar" ] || { echo "缺少 service/target/userbase.jar,请先 mvn package"; exit 1; } [ -f "$ROOT/front/dist/prod/index.html" ] || { echo "缺少 front/dist/prod,请先 npm run build:prod"; exit 1; } echo "== login $REGISTRY ==" echo "${ACR_PASSWORD:?请设置 ACR_PASSWORD}" | docker login --username="${ACR_USERNAME:?请设置 ACR_USERNAME}" --password-stdin "$REGISTRY" echo "== build $APP_IMG ==" docker build -f "$ROOT/service/docker/Dockerfile" -t "$APP_IMG" "$ROOT/service" echo "== build $FRONT_IMG ==" docker build -f "$ROOT/front/docker/Dockerfile" -t "$FRONT_IMG" "$ROOT/front" echo "== push ==" docker push "$APP_IMG" docker push "$FRONT_IMG" echo "PUSHED $APP_IMG" echo "PUSHED $FRONT_IMG"