feat(release): gate backend deploy and rollback

This commit is contained in:
key
2026-07-29 03:28:10 +08:00
parent c3e0789f29
commit 39476b2244
5 changed files with 724 additions and 1 deletions
+1 -1
View File
@@ -64,7 +64,7 @@
## 发布前置条件
1. 确认发布窗口、DB 备份和回滚负责人;迁移脚本包含 `ALTER TABLE`,不能在无备份状态执行。
2. 发布前先执行 `scripts/release-preflight.sh` 的本地只读检查。定向后端发布后使用 `RELEASE_VERIFY_REMOTE_BACKEND=true RELEASE_VERIFY_REMOTE_SCHEMA=true ./scripts/release-preflight.sh`,只核对 AIHR 模块、必需表和生产运行时 schema 保护,不因本轮未发布的静态资源产生假失败;该结果必须明确记录为“后端定向发布”。完整包发布后,必须按 `docs/DEV_SETUP.md` 再启用 `RELEASE_VERIFY_REMOTE_MATCH=true`,同时核对线上静态资源、AIHR 模块和必需表;schema 检查只读、不执行迁移。定向后端或单项 H5 校验不能替代完整包复核。
2. 发布前先执行 `scripts/release-preflight.sh` 的本地只读检查。定向后端发布先运行 `scripts/release-backend.sh plan`;只有负责人明确授权后才运行 `deploy`,由脚本固定目标、备份旧 JAR、校验候选、原子切换并在失败时恢复。发布后脚本会使用 `RELEASE_VERIFY_REMOTE_BACKEND=true RELEASE_VERIFY_REMOTE_SCHEMA=true ./scripts/release-preflight.sh`,只核对 AIHR 模块、必需表和生产运行时 schema 保护,不因本轮未发布的静态资源产生假失败;该结果必须明确记录为“后端定向发布”。完整包发布后,必须按 `docs/DEV_SETUP.md` 再启用 `RELEASE_VERIFY_REMOTE_MATCH=true`,同时核对线上静态资源、AIHR 模块和必需表;schema 检查只读、不执行迁移。定向后端或单项 H5 校验不能替代完整包复核。
3. 确认迁移目标库、租户和字符集为 MySQL 8 / `utf8mb4`;脚本只允许在目标业务库执行。
4. 生产组织同步凭据、AI 供应商留存/费用口径和正式试点窗口仍未闭合时,不要把迁移完成宣称为 BRD 验收完成。
+36
View File
@@ -324,6 +324,42 @@ Android 人工验收每完成一个步骤,用 `.\scripts\capture-android-accep
发布时必须保留 preflight 输出、远端备份目录和发布后浏览器回归结果;回滚优先使用对应备份目录恢复,再重启后端服务,不能直接覆盖当前线上目录而不留证据。
### 定向后端发布与回滚
8 月 1 日独立 APK 如只需补齐候选后端语义,使用固定拓扑的 `release-backend.sh`,不要手工 `scp` 后直接覆盖。脚本只允许 `YCWY:/opt/wygj/app/ruoyi-admin.jar` 和 `wygj-aihr.service`,默认 `plan` 与 `rollback-plan` 只读;`deploy`/`rollback` 必须使用只读计划输出的完整 SHA-256 授权串并保持 Git 工作区干净。计划阶段会核对冻结提交、JAR 哈希与 AIHR 模块、生产目标/服务/空间和 schema;部署阶段先保留旧 JAR 与清单,再在同目录校验并原子切换、重启、执行后端 + schema 预检,任何激活或发布后预检失败都会尝试恢复旧 JAR。回滚前还会额外备份当时正在运行的 JAR。脚本不删除备份,不发布管理端/H5,不执行数据库迁移。
先只读生成计划:
```bash
./scripts/release-backend.sh plan \
--artifact output/aug1-release/0.1.10-110-dc20b920/ruoyi-admin-dc20b920.jar \
--artifact-commit dc20b92061f10a356ed73eb105ef7b00c8b8a617 \
--expected-sha256 8c676f2fbfccb4f4573cbca1259e8b26eb83ebdb469adcbaf714c5931ef3cf2d
```
只有负责人明确授权后,才能把计划输出的 `approval_token` 原样传给 `deploy`;仅运行 `plan` 不构成发布授权:
```bash
./scripts/release-backend.sh deploy \
--artifact output/aug1-release/0.1.10-110-dc20b920/ruoyi-admin-dc20b920.jar \
--artifact-commit dc20b92061f10a356ed73eb105ef7b00c8b8a617 \
--expected-sha256 8c676f2fbfccb4f4573cbca1259e8b26eb83ebdb469adcbaf714c5931ef3cf2d \
--approval 'DEPLOY_BACKEND:<完整候选JAR-SHA256>'
```
发布成功会输出 `rollback_backup`、`rollback_sha256` 和回滚授权串。先只读核对备份,再在获得单独回滚授权后执行:
```bash
./scripts/release-backend.sh rollback-plan \
--backup-dir '<deploy输出的rollback_backup>' \
--expected-sha256 '<deploy输出的rollback_sha256>'
./scripts/release-backend.sh rollback \
--backup-dir '<deploy输出的rollback_backup>' \
--expected-sha256 '<deploy输出的rollback_sha256>' \
--approval 'ROLLBACK_BACKEND:<完整备份JAR-SHA256>'
```
## MVP 页面验证
登录后侧栏应只展示以下入口: