文件
hyb-oa/deploy/trialrun/deploy-existing.sh
T

66 行
2.3 KiB
Bash
可执行文件

#!/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] 应用发布与备份合同刷新完整通过"