#!/usr/bin/env bash # 构建(可选推送)服务镜像。被 deploy/<服务>/deploy.sh 的 build/deploy 动作调用,也可单独用。 # # 用法: [TAG=.. REGISTRY=.. PLATFORM=.. PUSH=0] ./build.sh # service : console | admin # PUSH=0 : 只构建不推送(本机看效果用;deploy.sh 在 local 环境会自动传 PUSH=0) # # 镜像名固定 = /starpivot-:,与各 docker-compose.yml 对齐。 set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICE="${1:-}" [ -n "$SERVICE" ] || { echo "用法: ./build.sh "; exit 1; } REGISTRY="${REGISTRY:-registry.voitrans.net}" TAG="${TAG:-latest}" PLATFORM="${PLATFORM:-linux/amd64}" PUSH="${PUSH:-1}" # 服务 → 构建上下文 / Dockerfile(见各 Dockerfile 顶部「构建上下文」注释) case "$SERVICE" in console) CONTEXT="$REPO_ROOT/apps/services"; DOCKERFILE="$CONTEXT/Dockerfile.console" ;; admin) CONTEXT="$REPO_ROOT/apps/admin"; DOCKERFILE="$CONTEXT/Dockerfile" ;; *) echo "未知服务: $SERVICE(应为 console|admin)"; exit 1 ;; esac [ -f "$DOCKERFILE" ] || { echo "✗ 找不到 Dockerfile: $DOCKERFILE"; exit 1; } IMAGE="$REGISTRY/starpivot-$SERVICE:$TAG" echo ">>> 构建 $IMAGE (platform=$PLATFORM, context=$CONTEXT)" docker build --platform "$PLATFORM" -f "$DOCKERFILE" -t "$IMAGE" "$CONTEXT" if [ "$PUSH" = 1 ]; then echo ">>> 推送 $IMAGE" docker push "$IMAGE" else echo ">>> 跳过推送(PUSH=0),镜像已在本地:$IMAGE" fi