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.
54 lines
2.7 KiB
54 lines
2.7 KiB
#!/usr/bin/env bash
|
|
# voitrans 生产环境:仅「构建带版本号的镜像并推送」,不部署。
|
|
#
|
|
# 业务五服务(gateway/home/api/mcp/timer)打成单镜像 starpivot-app(所有应用共用此镜像)。
|
|
# 同时推送 :<version> 与 :latest 两个 tag。部署用 ./prod-deploy.sh <应用> <区域> <version>。
|
|
#
|
|
# 用法(在 deploy/voitrans/ 下):
|
|
# ./prod-build.sh <version> # 只要版本号(应用共用同一镜像,构建不分应用);version 必须形如 X.Y.Z,如 0.1.1
|
|
# ./prod-build.sh <version> [公司] # 公司 = yunyan | lingpu | along(省略则交互选择;无 TTY 用默认 yunyan)
|
|
set -euo pipefail
|
|
|
|
SVC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SVC_DIR/../.." && pwd)"
|
|
BUILD_CONTEXT="$REPO_ROOT/apps/services"
|
|
DOCKERFILE="$BUILD_CONTEXT/Dockerfile.voitrans"
|
|
|
|
# 各公司镜像仓库地址/账号统一放这里,换仓库只改 deploy/registry-profiles.sh
|
|
source "$REPO_ROOT/deploy/registry-profiles.sh"
|
|
|
|
blue() { printf "\033[34m%s\033[0m\n" "$*"; }
|
|
green() { printf "\033[32m%s\033[0m\n" "$*"; }
|
|
red() { printf "\033[31m%s\033[0m\n" "$*"; }
|
|
|
|
# ── 镜像名/仓库地址/账号都由所选公司决定,见 deploy/registry-profiles.sh。
|
|
# 镜像名必须走 prod_image_name(),不要在这里写死——build 推的名字和 deploy 拉的名字
|
|
# 一旦漂移,要到远端 docker pull 才暴露(旧的 voitrans-a11 就是这么错配过一轮)。
|
|
PLATFORM="${PLATFORM:-linux/amd64}"
|
|
|
|
VERSION="${1:-}"
|
|
[ -n "$VERSION" ] || { red "用法: ./prod-build.sh <version>(如 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; }
|
|
|
|
# ── 公司(决定推到哪个镜像仓库):第 2 个参数指定,省略则交互选择 ──
|
|
COMPANY="${2:-}"
|
|
[ -n "$COMPANY" ] || COMPANY="$(pick_company)"
|
|
registry_profile "$COMPANY" || exit 1
|
|
IMAGE_NAME="$(prod_image_name "$COMPANY" app)" || exit 1
|
|
green "✓ 目标仓库: ${COMPANY}($COMPANY_DESC · ${REGISTRY}) 镜像: ${IMAGE_NAME}"
|
|
|
|
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 <应用> along $VERSION"
|
|
echo " 例:./prod-deploy.sh ym along $VERSION"
|
|
|