You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.5 KiB
38 lines
1.5 KiB
#!/usr/bin/env bash
|
|
# 构建(可选推送)服务镜像。被 deploy/<服务>/deploy.sh 的 build/deploy 动作调用,也可单独用。
|
|
#
|
|
# 用法: [TAG=.. REGISTRY=.. PLATFORM=.. PUSH=0] ./build.sh <service>
|
|
# service : console | admin
|
|
# PUSH=0 : 只构建不推送(本机看效果用;deploy.sh 在 local 环境会自动传 PUSH=0)
|
|
#
|
|
# 镜像名固定 = <REGISTRY>/starpivot-<service>:<TAG>,与各 docker-compose.yml 对齐。
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SERVICE="${1:-}"
|
|
[ -n "$SERVICE" ] || { echo "用法: ./build.sh <console|admin>"; exit 1; }
|
|
|
|
REGISTRY="${REGISTRY:-docker-registry.ideapsound.com}"
|
|
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
|
|
|