fix: deploy.sh — 回滚调用改 bash 不依赖 +x;.env 复杂类型(CORS_ORIGINS等)JSON预检 fail-fast
This commit is contained in:
+17
-1
@@ -121,6 +121,22 @@ if [ ! -f "$REPO_ROOT/.env" ]; then
|
||||
fi
|
||||
set -a; source "$REPO_ROOT/.env"; set +a
|
||||
|
||||
# 3. .env 复杂类型预检(fail fast):pydantic-settings 会把 CORS_ORIGINS 等按 JSON 解析,
|
||||
# 写成了普通字符串会在迁移时炸(8-10 事故),这里提前捕获,给出正确写法提示
|
||||
json_env_check() {
|
||||
local var="$1"
|
||||
local v="${!var:-}"
|
||||
[ -z "$v" ] && return 0
|
||||
if ! python3 -c "import json,sys; json.loads(sys.argv[1])" "$v" 2>/dev/null; then
|
||||
error "$var 必须是合法 JSON(如 [\"https://a.com\"]),当前值: $v
|
||||
请修改 $REPO_ROOT/.env 后重试。"
|
||||
fi
|
||||
}
|
||||
json_env_check CORS_ORIGINS
|
||||
json_env_check ALLOWED_ORIGINS
|
||||
json_env_check REDIS_URL
|
||||
json_env_check PUBLIC_ORIGINS
|
||||
|
||||
# 3. flock 单实例锁(防两人/两终端并发部署)
|
||||
exec 9>/tmp/scilit-deploy.lock
|
||||
flock -n 9 || error "已有部署/回滚在进行中(/tmp/scilit-deploy.lock 被锁)。"
|
||||
@@ -305,7 +321,7 @@ check_single_head
|
||||
|
||||
auto_rollback() {
|
||||
echo -e "${RED}[✗] 部署部分完成(迁移已跑/容器已切),触发自动回滚${NC}"
|
||||
"$DEPLOY_DIR/rollback.sh" --auto || warn "自动回滚失败,请人工介入(详见 docs/16 §3 回滚 runbook)"
|
||||
bash "$DEPLOY_DIR/rollback.sh" --auto || warn "自动回滚失败,请人工介入(详见 docs/16 §3 回滚 runbook)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user