49 行
1.7 KiB
Bash
可执行文件
49 行
1.7 KiB
Bash
可执行文件
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
DEPLOY_SERVER="${DEPLOY_SERVER:-}"
|
|
DEPLOY_CONTRACT_UNIT="${DEPLOY_CONTRACT_UNIT:-hyb-oa-automatic-backup-daily.service}"
|
|
|
|
fail() {
|
|
echo "[deploy-existing][ERROR] $1" >&2
|
|
exit 1
|
|
}
|
|
|
|
[[ "$DEPLOY_SERVER" =~ ^([A-Za-z0-9._-]+@)?[A-Za-z0-9._-]+$ ]] \
|
|
|| fail "必须显式提供安全的 DEPLOY_SERVER"
|
|
[[ "$DEPLOY_CONTRACT_UNIT" =~ ^[A-Za-z0-9_.@-]+\.service$ ]] \
|
|
|| fail "DEPLOY_CONTRACT_UNIT 格式无效"
|
|
command -v ssh >/dev/null 2>&1 || fail "缺少 ssh"
|
|
|
|
unit_environment="$(ssh "$DEPLOY_SERVER" \
|
|
"systemctl show '${DEPLOY_CONTRACT_UNIT}' -p Environment --value")"
|
|
[[ -n "$unit_environment" ]] || fail "无法读取既有部署合同 unit"
|
|
|
|
declare -A contract=()
|
|
for entry in $unit_environment; do
|
|
key="${entry%%=*}"
|
|
value="${entry#*=}"
|
|
case "$key" in
|
|
REMOTE_DIR|REMOTE_ENV_FILE|COMPOSE_FILE|COMPOSE_PROJECT_NAME|POSTGRES_DATA_DIR|STORAGE_HOST_DIR)
|
|
contract["$key"]="$value"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
for key in REMOTE_DIR REMOTE_ENV_FILE COMPOSE_FILE COMPOSE_PROJECT_NAME POSTGRES_DATA_DIR STORAGE_HOST_DIR; do
|
|
[[ -n "${contract[$key]:-}" ]] || fail "既有部署合同缺少 $key"
|
|
done
|
|
|
|
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 \
|
|
SYNC_ENV=0 \
|
|
bash "$ROOT_DIR/deploy/trialrun/deploy.sh"
|