92 lines
2.2 KiB
Bash
Executable File
92 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 只回滚 api / player / admin 镜像 tag,不自动恢复数据库。
|
||
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
# shellcheck source=scripts/deploy-lib.sh
|
||
source "$SCRIPT_DIR/deploy-lib.sh"
|
||
|
||
TARGET_TAG=""
|
||
SKIP_BACKUP=false
|
||
ALLOW_DEFAULT_SECRETS=false
|
||
|
||
usage() {
|
||
cat <<'EOF'
|
||
用法: scripts/rollback.sh --to TAG [选项]
|
||
|
||
默认流程:
|
||
1. 检查 .env.docker
|
||
2. 确认本机存在 thebet365-api/player/admin:TAG
|
||
3. 备份 PostgreSQL 与 uploads 到 ./backups
|
||
4. 将 api / player / admin 切回指定 TAG
|
||
5. 等待健康检查并记录发布状态
|
||
|
||
注意:
|
||
本脚本只回滚镜像,不回滚数据库结构或数据。
|
||
如果目标版本涉及不可逆迁移,必须先按备份文件手工恢复数据库。
|
||
|
||
选项:
|
||
--to TAG 目标镜像 tag,必填
|
||
--no-backup 跳过 PostgreSQL 与 uploads 备份
|
||
--allow-default-secrets 允许 .env.docker 使用示例密钥,仅测试环境使用
|
||
-h, --help 显示帮助
|
||
|
||
示例:
|
||
./scripts/rollback.sh --to v1.2.2
|
||
EOF
|
||
}
|
||
|
||
while [ $# -gt 0 ]; do
|
||
case "$1" in
|
||
--to)
|
||
TARGET_TAG="${2:?缺少 --to 参数值}"
|
||
shift 2
|
||
;;
|
||
--no-backup)
|
||
SKIP_BACKUP=true
|
||
shift
|
||
;;
|
||
--allow-default-secrets)
|
||
ALLOW_DEFAULT_SECRETS=true
|
||
shift
|
||
;;
|
||
-h|--help)
|
||
usage
|
||
exit 0
|
||
;;
|
||
*)
|
||
die "未知参数: $1"
|
||
;;
|
||
esac
|
||
done
|
||
|
||
[ -n "$TARGET_TAG" ] || die "缺少 --to TAG"
|
||
set_deploy_image_tag "$TARGET_TAG"
|
||
|
||
cd "$ROOT"
|
||
require_docker
|
||
ensure_env_file || exit 1
|
||
validate_prod_env "$ALLOW_DEFAULT_SECRETS"
|
||
require_images_for_current_tag
|
||
|
||
start_infra
|
||
|
||
if [ "$SKIP_BACKUP" = false ]; then
|
||
backup_database "pre-rollback"
|
||
backup_uploads "pre-rollback"
|
||
prune_old_backups
|
||
else
|
||
warn "已跳过 PostgreSQL 与 uploads 备份"
|
||
fi
|
||
|
||
log "回滚 api / player / admin 到 tag: $(current_image_tag)"
|
||
compose up -d api player admin
|
||
wait_for_stack_ready
|
||
show_prisma_status
|
||
compose ps
|
||
persist_image_tag
|
||
record_release_state "rollback"
|
||
warn "镜像已回滚;数据库未自动恢复。若此次回滚涉及不可逆迁移,请按备份文件手工恢复数据库。"
|
||
print_stack_urls
|