66 行
2.3 KiB
Bash
可执行文件
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] 应用发布与备份合同刷新完整通过"
|