feat(release): gate backend deploy and rollback
This commit is contained in:
@@ -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 验收完成。
|
||||
|
||||
|
||||
@@ -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 页面验证
|
||||
|
||||
登录后侧栏应只展示以下入口:
|
||||
|
||||
Reference in New Issue
Block a user