fix: deploy.sh — 回滚调用改 bash 不依赖 +x;.env 复杂类型(CORS_ORIGINS等)JSON预检 fail-fast
CI / backend (push) Waiting to run
CI / frontend (push) Waiting to run

This commit is contained in:
34047007@qq.com
2026-08-10 16:49:12 +08:00
parent 0122719d11
commit 5842f2c99c
+17 -1
View File
@@ -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
}