#!/usr/bin/env bash # admin 生产环境:仅「构建带版本号的镜像并推送」,不部署。 # # Nuxt 管理前端打成镜像 yunyan-admin,同时推送 : 与 :latest 两个 tag。 # 部署用 ./prod-deploy.sh 。 # # 用法(在 deploy/admin/ 下): # ./prod-build.sh # version 必须形如 X.Y.Z,如 0.1.1 set -euo pipefail SVC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SVC_DIR/../.." && pwd)" BUILD_CONTEXT="$REPO_ROOT/apps/admin" DOCKERFILE="$BUILD_CONTEXT/Dockerfile" blue() { printf "\033[34m%s\033[0m\n" "$*"; } green() { printf "\033[32m%s\033[0m\n" "$*"; } red() { printf "\033[31m%s\033[0m\n" "$*"; } # ── 私有仓库凭据(写死,公开仓库前清空 REGISTRY_PASS)── IMAGE_NAME="yunyan-admin" REGISTRY="docker-registry.ideapsound.com" REGISTRY_USER="admin" REGISTRY_PASS="li13451234" PLATFORM="${PLATFORM:-linux/amd64}" VERSION="${1:-}" [ -n "$VERSION" ] || { red "用法: ./prod-build.sh (如 0.1.1)"; exit 1; } if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then red "✗ version 必须形如 0.1.1,当前: $VERSION"; exit 1 fi [ -f "$DOCKERFILE" ] || { red "✗ 缺少 $DOCKERFILE"; exit 1; } IMG_VER="$REGISTRY/$IMAGE_NAME:$VERSION" IMG_LATEST="$REGISTRY/$IMAGE_NAME:latest" blue ">>> 构建生产镜像 $IMG_VER (+latest) context=$BUILD_CONTEXT" echo "$REGISTRY_PASS" | docker login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin docker build --network=host --platform "$PLATFORM" -f "$DOCKERFILE" -t "$IMG_VER" -t "$IMG_LATEST" "$BUILD_CONTEXT" docker push "$IMG_VER" docker push "$IMG_LATEST" green "✓ 已推送 $IMG_VER 与 $IMG_LATEST" echo " 部署:./prod-deploy.sh $VERSION"