加固既有生产部署流程(07-27-yang-jun-reimbursement-readiness)
这个提交包含在:
+48
@@ -0,0 +1,48 @@
|
||||
#!/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"
|
||||
在新工单中引用
屏蔽一个用户