补充部署合同失败恢复说明(08-02-deployment-preflight-backup-contract-refresh)

这个提交包含在:
2026-08-02 12:09:06 +08:00
父节点 7138d2b85c
当前提交 2061c03776
共修改 5 个文件,包含 8 行新增和 1 行删除
+1 -1
查看文件
@@ -93,7 +93,7 @@
- [ ] 若本次包含前端体验修复,已在容器内确认 `/app/client/dist` 含关键 test id 或公网 asset hash 已更新
- [ ] 公网 bundle 扫描确认包含匹配的 12 位构建标识,且不包含完整提交 SHA
- [ ] wrapper 在应用与公网检查成功后自动刷新四个固定 service 的 build drop-in;四个最终 SHA 与活动容器一致,四个 timer 均 enabled/active
- [ ] 若出现 `DEPLOYED_BUT_CONTRACT_REFRESH_FAILED`,已按 root 身份、程序可用性、unit SHA、timer 状态四类处理,并将本次发布标记为“应用已部署但合同未收口”,未误报完整成功
- [ ] 若出现 `DEPLOYED_BUT_CONTRACT_REFRESH_FAILED`,已按 root 身份、程序可用性、unit SHA、timer 状态四类处理,并将本次发布标记为“应用已部署但合同未收口”;修复后单独执行 forced-command `refresh` 并重跑只读体检,未重复部署应用或绕过 `backup_build`
- [ ] 登录验证已由 live smoke 与 release gate 覆盖;仅首次接入或第三方后台配置变更时补做人工确认
## C. 发布后(Post-check)
+1
查看文件
@@ -435,6 +435,7 @@ systemctl status hyb-oa-public-app-health.service --no-pager
- 旧栈停止命令必须使用冻结阶段由 `docker compose ls` 实测的旧 project;不得拿新 project 名去停止旧容器。
- `artifacts/` 和 `output/` 是运行期证据/截图目录,不作为源码发布输入,也不由 `rsync --delete` 清理远端历史证据。
- 应用、`/ready`、smoke 和公网检查成功后,wrapper 才调用 forced-command `refresh`,以活动容器 build 原子刷新四个固定 service 的 systemd drop-in并验证四个 timer。失败时固定输出 `DEPLOYED_BUT_CONTRACT_REFRESH_FAILED`、退出非零,并明确表示应用已发布但合同未收口;不自动回滚应用。
- 出现 `DEPLOYED_BUT_CONTRACT_REFRESH_FAILED` 后,应用已经是通过 smoke 的新版本。修复对应的 root SSH、forced-command 程序、unit 或 timer 问题后,单独执行 `ssh <forced-command-ssh-target> refresh` 收敛合同,再重跑只读聚合体检;不要重跑应用部署,也不要绕过 `backup_build` 检查。
3) 构建并重启:
```bash
docker-compose -p "$COMPOSE_PROJECT_NAME" -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server