实现(08-08-production-deployment-execution): 校准生产身份只读门禁
这个提交包含在:
@@ -42,15 +42,28 @@ deployment_contract_load "$DEPLOY_SERVER" "$DEPLOY_CONTRACT_UNIT" contract \
|
||||
|
||||
echo "[deploy-existing] 已读取受控 unit 合同;路径与标识不回显"
|
||||
|
||||
if [[ -z "${EXPECTED_PRODUCTION_ORIGIN+x}" ]]; then
|
||||
if [[ -z "${EXPECTED_PRODUCTION_ORIGIN:-}" ]]; then
|
||||
fail "生产部署必须显式提供 EXPECTED_PRODUCTION_ORIGIN(仅进程环境)"
|
||||
fi
|
||||
if [[ -z "${EXPECTED_PRODUCTION_DB_NAME+x}" ]]; then
|
||||
fail "生产部署必须显式提供 EXPECTED_PRODUCTION_DB_NAME(仅进程环境)"
|
||||
if [[ -z "${EXPECTED_PRODUCTION_DB_NAME_SHA256:-}" ]]; then
|
||||
fail "生产部署必须由身份引导器提供 EXPECTED_PRODUCTION_DB_NAME_SHA256"
|
||||
fi
|
||||
if [[ -z "${EXPECTED_PENDING_MIGRATIONS+x}" ]]; then
|
||||
fail "生产部署必须显式提供 EXPECTED_PENDING_MIGRATIONS(可为空)"
|
||||
fi
|
||||
if [[ -z "${EXPECTED_DEPLOY_SERVER:-}" ]]; then
|
||||
fail "生产部署必须由身份引导器提供 EXPECTED_DEPLOY_SERVER"
|
||||
fi
|
||||
if [[ -z "${EXPECTED_REMOTE_DIR:-}" ]]; then
|
||||
fail "生产部署必须由身份引导器提供 EXPECTED_REMOTE_DIR"
|
||||
fi
|
||||
if [[ -z "${EXPECTED_COMPOSE_PROJECT_NAME:-}" ]]; then
|
||||
fail "生产部署必须由身份引导器提供 EXPECTED_COMPOSE_PROJECT_NAME"
|
||||
fi
|
||||
case "${PRODUCTION_READ_ONLY_PREFLIGHT:-0}" in
|
||||
0|1) ;;
|
||||
*) fail "PRODUCTION_READ_ONLY_PREFLIGHT 只能为 0 或 1" ;;
|
||||
esac
|
||||
[[ -f "$ROOT_DIR/$PROVENANCE_SCRIPT" ]] || fail "缺少发布来源校验脚本"
|
||||
[[ -f "$ROOT_DIR/$PRODUCTION_PREFLIGHT_SCRIPT" ]] || fail "缺少生产迁移 preflight 脚本"
|
||||
|
||||
@@ -64,8 +77,11 @@ source_commit="$(node -e 'const value = JSON.parse(process.argv[1]); process.std
|
||||
echo ">>> 0.2 生产目标与迁移 preflight(只读,先于 deploy.sh)"
|
||||
PRODUCTION_PREFLIGHT_REPORT_ROOT="${PRODUCTION_PREFLIGHT_REPORT_ROOT:-artifacts/production-preflight-$(date +%Y%m%d-%H%M%S)}"
|
||||
EXPECTED_PRODUCTION_ORIGIN="$EXPECTED_PRODUCTION_ORIGIN" \
|
||||
EXPECTED_PRODUCTION_DB_NAME="$EXPECTED_PRODUCTION_DB_NAME" \
|
||||
EXPECTED_PRODUCTION_DB_NAME_SHA256="$EXPECTED_PRODUCTION_DB_NAME_SHA256" \
|
||||
EXPECTED_PENDING_MIGRATIONS="$EXPECTED_PENDING_MIGRATIONS" \
|
||||
EXPECTED_DEPLOY_SERVER="$EXPECTED_DEPLOY_SERVER" \
|
||||
EXPECTED_REMOTE_DIR="$EXPECTED_REMOTE_DIR" \
|
||||
EXPECTED_COMPOSE_PROJECT_NAME="$EXPECTED_COMPOSE_PROJECT_NAME" \
|
||||
DEPLOY_SERVER="$DEPLOY_SERVER" \
|
||||
REMOTE_DIR="${contract[REMOTE_DIR]}" \
|
||||
REMOTE_ENV_FILE="${contract[REMOTE_ENV_FILE]}" \
|
||||
@@ -78,6 +94,11 @@ PRODUCTION_PREFLIGHT_REPORT_DIR="$PRODUCTION_PREFLIGHT_REPORT_ROOT/pre" \
|
||||
node "$ROOT_DIR/$PRODUCTION_PREFLIGHT_SCRIPT" \
|
||||
|| fail "生产目标或迁移 preflight 未通过;未进入 deploy.sh"
|
||||
|
||||
if [[ "${PRODUCTION_READ_ONLY_PREFLIGHT:-0}" == "1" ]]; then
|
||||
echo "[deploy-existing][PASS] 只读身份、迁移与回滚窗口门禁通过;未进入 deploy.sh"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DEPLOY_SERVER="$DEPLOY_SERVER" \
|
||||
REMOTE_DIR="${contract[REMOTE_DIR]}" \
|
||||
REMOTE_ENV_FILE="${contract[REMOTE_ENV_FILE]}" \
|
||||
@@ -93,8 +114,11 @@ bash "$ROOT_DIR/deploy/trialrun/deploy.sh"
|
||||
|
||||
echo ">>> 6.1 部署后 migration status 与目标只读复核"
|
||||
EXPECTED_PRODUCTION_ORIGIN="$EXPECTED_PRODUCTION_ORIGIN" \
|
||||
EXPECTED_PRODUCTION_DB_NAME="$EXPECTED_PRODUCTION_DB_NAME" \
|
||||
EXPECTED_PRODUCTION_DB_NAME_SHA256="$EXPECTED_PRODUCTION_DB_NAME_SHA256" \
|
||||
EXPECTED_PENDING_MIGRATIONS="" \
|
||||
EXPECTED_DEPLOY_SERVER="$EXPECTED_DEPLOY_SERVER" \
|
||||
EXPECTED_REMOTE_DIR="$EXPECTED_REMOTE_DIR" \
|
||||
EXPECTED_COMPOSE_PROJECT_NAME="$EXPECTED_COMPOSE_PROJECT_NAME" \
|
||||
DEPLOY_SERVER="$DEPLOY_SERVER" \
|
||||
REMOTE_DIR="${contract[REMOTE_DIR]}" \
|
||||
REMOTE_ENV_FILE="${contract[REMOTE_ENV_FILE]}" \
|
||||
|
||||
在新工单中引用
屏蔽一个用户