#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" DEPLOY_SERVER="${DEPLOY_SERVER:-}" DEPLOY_REFRESH_SERVER="${DEPLOY_REFRESH_SERVER:-}" DEPLOY_CONTRACT_UNIT="${DEPLOY_CONTRACT_UNIT:-hyb-oa-automatic-backup-daily.service}" # shellcheck source=deployment-contract-lib.sh source "$ROOT_DIR/deploy/trialrun/deployment-contract-lib.sh" fail() { echo "[deploy-existing][ERROR] $1" >&2 exit 1 } deployment_contract_safe_ssh_target "$DEPLOY_SERVER" \ || fail "必须显式提供安全的 DEPLOY_SERVER" deployment_contract_safe_ssh_target "$DEPLOY_REFRESH_SERVER" \ || fail "必须显式提供安全的 DEPLOY_REFRESH_SERVER" deployment_contract_safe_service "$DEPLOY_CONTRACT_UNIT" \ || fail "DEPLOY_CONTRACT_UNIT 格式无效" command -v ssh >/dev/null 2>&1 || fail "缺少 ssh" declare -A contract=() echo "[deploy-existing] 开始只读聚合体检" DEPLOY_SERVER="$DEPLOY_SERVER" \ DEPLOY_REFRESH_SERVER="$DEPLOY_REFRESH_SERVER" \ DEPLOY_CONTRACT_UNIT="$DEPLOY_CONTRACT_UNIT" \ bash "$ROOT_DIR/deploy/trialrun/check-existing-deployment.sh" \ || fail "部署前聚合体检未通过" deployment_contract_load "$DEPLOY_SERVER" "$DEPLOY_CONTRACT_UNIT" contract \ || fail "无法读取完整既有部署合同" echo "[deploy-existing] 已读取受控 unit 合同;路径与标识不回显" DEPLOY_SERVER="$DEPLOY_SERVER" \ REMOTE_DIR="${contract[REMOTE_DIR]}" \ REMOTE_ENV_FILE="${contract[REMOTE_ENV_FILE]}" \ COMPOSE_FILE="${contract[COMPOSE_FILE]}" \ COMPOSE_PROJECT_NAME="${contract[COMPOSE_PROJECT_NAME]}" \ POSTGRES_DATA_DIR="${contract[POSTGRES_DATA_DIR]}" \ STORAGE_HOST_DIR="${contract[STORAGE_HOST_DIR]}" \ DEPLOY_DATA_MODE=existing \ DEPLOY_DEFER_FINAL_SUCCESS=1 \ SYNC_ENV=0 \ bash "$ROOT_DIR/deploy/trialrun/deploy.sh" refresh_output="" refresh_status=0 if refresh_output="$(ssh "$DEPLOY_REFRESH_SERVER" refresh 2>/dev/null)"; then if [[ "$refresh_output" != "[deployment-contract-refresh][PASS] refreshed" ]]; then refresh_status=127 fi else refresh_status=$? fi refresh_category="$(deployment_contract_refresh_category "$refresh_status" "$refresh_output")" if [[ "$refresh_category" != "success" ]]; then echo "[deploy-existing][DEPLOYED_BUT_CONTRACT_REFRESH_FAILED] category=${refresh_category}" >&2 exit 1 fi echo "[deploy-existing][PASS] 应用发布与备份合同刷新完整通过"