#!/usr/bin/env bash # 各公司私有镜像仓库档案 —— 所有 build / deploy 脚本共用这一份。 # # 以前每个 dev-deploy.sh / prod-build.sh / prod-deploy.sh 各写死一份仓库地址和账号, # 换仓库要改 6+ 处、极易漏;现在统一放这里,换地址只改本文件。 # # 用法(在脚本里): # source "$REPO_ROOT/deploy/registry-profiles.sh" # registry_profile yunyan # → 设好 REGISTRY / REGISTRY_USER / REGISTRY_PASS / COMPANY_DESC # COMPANY="$(pick_company)" # → 交互选公司(无 TTY 时用 DEFAULT_COMPANY) # # ⚠️ 本文件纳入 git,下面的仓库密码会随仓库提交(私有仓库内可接受)。 # 公开仓库前务必清空 REGISTRY_PASS。 set -euo pipefail COMPANIES=(yunyan lingpu) # 可选公司(交互菜单按此顺序展示) DEFAULT_COMPANY="yunyan" # 不指定且无 TTY(CI/管道)时用哪个 # 按公司设置仓库三件套。失败返回非 0,由调用方决定是否 exit。 registry_profile() { case "${1:-}" in yunyan) COMPANY_DESC="云雁" REGISTRY="registry.voitrans.net" # 仓库实体在广州机 8.138.86.223(1Panel OpenResty 反代 → docker-registry:5000) REGISTRY_USER="liwei" REGISTRY_PASS="li13451234" ;; lingpu) COMPANY_DESC="灵谱" REGISTRY="registry.lingpu.net" # 仓库实体在灵谱香港机 8.217.193.140 REGISTRY_USER="liwei" REGISTRY_PASS="li13451234" ;; *) printf "\033[31m✗ 未知公司: %s(应为 %s)\033[0m\n" "${1:-<空>}" "${COMPANIES[*]}" >&2 return 1 ;; esac } # 交互选择公司;无 TTY 时回落到 DEFAULT_COMPANY。选中的 key 从 stdout 返回(菜单走 stderr,不污染返回值)。 pick_company() { if [ ! -t 0 ]; then printf '%s' "$DEFAULT_COMPANY"; return 0; fi printf "\033[34m选择镜像仓库所属公司:\033[0m\n" >&2 local i=1 c for c in "${COMPANIES[@]}"; do ( registry_profile "$c" >/dev/null 2>&1 printf " %d) %-8s → %s (%s)\n" "$i" "$c" "${COMPANY_DESC:-}" "${REGISTRY:-}" >&2 ) i=$((i+1)) done printf " 请输入序号 [1-%d](回车用默认 %s): " "${#COMPANIES[@]}" "$DEFAULT_COMPANY" >&2 local sel; read -r sel || { printf '%s' "$DEFAULT_COMPANY"; return 0; } [ -n "$sel" ] || { printf '%s' "$DEFAULT_COMPANY"; return 0; } case "$sel" in ''|*[!0-9]*) printf "\033[31m✗ 无效序号: %s\033[0m\n" "$sel" >&2; return 1 ;; esac { [ "$sel" -ge 1 ] && [ "$sel" -le "${#COMPANIES[@]}" ]; } || { printf "\033[31m✗ 序号超出范围\033[0m\n" >&2; return 1; } printf '%s' "${COMPANIES[$((sel-1))]}" }