Files
getDomain/docs/26_domainCheck_发布前运行验证与交付模板.md
2026-04-18 23:52:51 +08:00

636 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 26 domainCheck 发布前运行验证与交付模板
## 一、这份模板怎么用
这份文档不是设计说明,而是正式发布前最后一轮执行模板。
适用场景:
- 海外单脑控制面已经搭好
- 大陆节点已经接入或正在收口
- 代码已经更新到待发布版本
- 现在要做最后一轮运行验证、证据留存、交付确认
这份模板分成 3 段:
1. 发布前运行验证
2. 上线证据导出
3. 最终交付结论模板
---
## 二、发布前运行验证
### 1. 先跑统一收口摘要
```bash
cd /www/wwwroot/getDomain
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-check http://127.0.0.1:8100 http://127.0.0.1:8100 summary
```
记录结果:
- `go_live_status`
- `publish_status`
- `blocking_reasons`
- `warnings`
- `next_step_action_code`
- `operator_title`
- `launchpad_recommended_target_node_code`
- `launchpad_recommended_recovery_label`
- `launchpad_recommended_recovery_summary`
- `launchpad_onboarding_bootstrap_pending_nodes`
- `launchpad_onboarding_acceptance_ready_nodes`
通过标准:
- `go_live_status != blocked`
- `publish_status != blocked`
### 1.5 先看环境差异是否已收口
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh env-audit
bash domain-api/deploy/multi-region/drive_ops_center.sh runtime-refresh-recover
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-recover
```
重点只看:
- `status`
- `headline`
- `python.pytest_installed / fastapi_installed / uvicorn_installed`
- `python.runtimes`
- `services`
- `runtime.preflight_ok`
- `runtime.readiness_status`
- `runtime.route_surface_complete`
- `missing_items`
- `tooling_items`
通过标准建议:
- `status != blocked`
- `runtime.preflight_ok=true`
- `route_surface_complete=true`
- 如果 `missing_items` 里仍有关键基础项,先补环境,再继续业务复核
- 如果只有 `tooling_items`,可以继续上线复核,但建议后补本机工具链
- 如果 `runtime.runtime_may_need_restart=true`
- 不要直接继续接管或发布链
- 先按 `runtime-refresh-recover` 给出的固定顺序完成 API 重启与复检
- 如果你希望把这一轮“重启 + 总检 + 默认下一步 + 上线摘要”压成一次复核
- 直接执行 `go-live-recover`
### 1.6 先看托管节点接入面是否清楚
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh nodes http://127.0.0.1:8100
```
重点只看:
- `summary.agent_ready`
- `summary.ssh_ready`
- `summary.remote_access_ready`
- `summary.remote_access_state_counts`
- 每台节点的 `agent_state`
- 每台节点的 `remote_access_state`
- 每台节点的 `ssh_access_label`
- 每台节点的 `ssh_entry`
通过标准建议:
- 如果某台节点还是 `agent_pending`
- 先确认是否已经保存 SSH 入口
- 如果节点尚未保存 SSH 入口,但你已经决定由海外控制面统一接管
- 先补录:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh node-bind-ssh http://127.0.0.1:8100 mainland-worker-01 121.204.244.248 root 22
```
- 补录后立即复查:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh nodes http://127.0.0.1:8100
bash domain-api/deploy/multi-region/drive_ops_center.sh node-handover http://127.0.0.1:8100 mainland-worker-01
```
- 如果已经 `agent_ready`
- 说明该节点已进入标准远端执行器接管面
- 如果还不是 `agent_ready`,但 `ssh_ready` 已经成立
- 说明至少已经具备海外主控经 SSH 进入节点完成 bootstrap / 验收的前置条件
### 2. 再看总检详情
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh stack-diagnosis
```
记录结果:
- `stack_status`
- `issues`
- `next_step`
- `quick_commands`
通过标准:
- `stack_status != blocked`
- `issues` 里没有未处理的关键阻断项
### 3. 再看驾驶主线
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh driver-feed
bash domain-api/deploy/multi-region/drive_ops_center.sh codex-brief
```
记录结果:
- `top_recommendation`
- `automation_coverage`
- `recommended_behavior`
- `focus`
- `summary.launchpad_recommended_target_node_code`
- `summary.launchpad_recommended_recovery_label`
- `summary.launchpad_onboarding_bootstrap_pending_nodes`
- `summary.launchpad_onboarding_acceptance_ready_nodes`
通过标准:
- `automation_coverage.launch_status != blocked`
- 默认下一步已经明确
- 如果 `summary.launchpad_recommended_target_node_code` 非空
- 值班同事应能直接知道当前卡在哪台节点
- 不需要再回 launchpad 明细手工翻 gap rows
### 4. 若涉及发布,再看 Release Hub
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh release-launchpad
```
记录结果:
- `launchpad_status`
- `recommended_action_code`
- `default_rollout_gate_status`
- `recommended_target_node_code`
- `recommended_recovery_label`
- `recommended_recovery_summary`
- `onboarding_bootstrap_pending_nodes`
- `onboarding_acceptance_ready_nodes`
通过标准:
- `launchpad_status != blocked`
- `default_rollout_gate_status != blocked`
特殊判读:
- 如果 `recommended_action_code=api-restart`
- 不要误判成“节点没接好”
- 这更像是运行中的控制面 API 还没刷新到当前仓库的最新运维能力
- 应先执行:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh runtime-refresh-recover
```
- 然后重新跑:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh stack-diagnosis
bash domain-api/deploy/multi-region/drive_ops_center.sh release-launchpad
```
补充说明:
-`latest_release.json` 直接创建 Release或执行“基于最新包的一键智能 Rollout”之前
- 现在不仅要求 `smoke_test_ok=true`
- 还要求当前 `final_release_report.json` 与最新包完全匹配,且 `final_release_ok=true`
- 如果页面按钮被禁用,或 API 返回“最新发布包尚未完成最终签收”
- 优先检查 `final_release_report_stale_reason`
- 再检查 `final_release_gate_decision / final_release_gate_blocked_reasons`
### 5. 若涉及节点接管,补跑节点验收
如果这次发布包含:
- 新增大陆节点
- 重新接管旧节点
- 切换到 Node Agent 主接管模式
则不能只看总检摘要,还要对目标节点逐台完成验收。
先看验收计划:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh node-acceptance-plan http://127.0.0.1:8100 mainland-worker-01
```
确认无误后执行:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh node-acceptance-run http://127.0.0.1:8100 mainland-worker-01 cli/acceptance
```
记录结果:
- `node_code`
- `status`
- `checks`
- `blocking_issues`
- `warnings`
- `recommended_next_step`
通过标准:
- `status != blocked`
- 没有未处理的 `blocking_issues`
- 目标节点已经不再停留在“bootstrap pending / acceptance pending”
### 6. 若涉及远端执行,补跑日志回传验证
如果当前版本准备进入:
- 多机值班
- 海外单脑统一接管
- 远端动作回执与现场日志复核
则需要确认日志回传链已经可用,而不是只看节点在线。
先检查:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh log-sync-check
```
如果存在缺口,再执行恢复:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh log-sync-recover http://127.0.0.1:8100 key confirm cli/log-sync
```
必要时抓一份节点现场日志:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh scene-node-log http://127.0.0.1:8100 mainland-worker-01 120 full
```
记录结果:
- `log_sync_enabled`
- `line_count`
- `source_nodes`
- `missing_nodes`
- `scene_log.status`
通过标准:
- 关键节点已出现在 `source_nodes`
- `missing_nodes` 不包含当前发布主车道节点
- 如需人工复核现场,`scene-node-log` 能取到有效日志
### 7. 若涉及 Node Agent 交付,补看队列健康
如果这轮发布已经进入“控制面发动作、节点拉任务、节点回执结果”的模式,就必须确认 delivery queue 没有假健康。
先看队列摘要:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh queue-status http://127.0.0.1:8100 mainland-worker-01
```
如果怀疑有堆积或死信,再看明细:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh queue-records http://127.0.0.1:8100 mainland-worker-01 dead_letter
```
如需重放:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh queue-replay http://127.0.0.1:8100 mainland-worker-01 20 cli/queue-replay
```
记录结果:
- `delivery_queue.summary`
- `dead_letter`
- `retrying`
- `pending`
- `replayed_count`
通过标准:
- `dead_letter=0`
- 没有持续增长的 `retrying`
- 队列不处于异常堆积状态
注意:
- `dead_letter > 0` 时,不应宣称“可正式发布”
- 这种情况至少按 `publish_status = blocked` 处理
### 8. 最后跑一次 doctor 结论
前面的检查是分面复核最后还要再收成一句话让交班、值班、Codex 驾驶员看到同一结论。
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh doctor-decision
```
记录结果:
- `status`
- `decision`
- `recommended_commands`
- `recommended_reading_order`
- `launchpad_alignment`
通过标准:
- `status != blocked`
- `decision` 与前面的 `go-live-check / stack-diagnosis / release-launchpad` 不冲突
- `recommended_commands` 已经指向明确的下一跳,而不是泛化排查
### 9. 若希望直接生成“可否签字上线”的最终摘要
如果你不想手工再拼:
- bundle review
- doctor 结论
- 发布门禁
可以直接执行:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-signoff
```
如果已经有现成证据包,也可以直接基于 manifest 输出:
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-signoff /path/to/go-live-bundle
```
这一步现在不是“另一套单独判断”,而是固定复用:
- `go-live-review`
- `doctor-decision`
- `go-live-summary / 发布门禁 / launchpad 摘要`
也就是说页面首屏、CLI 和海外 Codex 看到的最终签收结论,已经开始共享同一份签字口径。
重点只看:
- `signoff_status`
- `headline`
- `release_gate`
- `blocked_reasons`
- `attention_reasons`
- `decision`
- `recommended_commands`
通过标准:
- `signoff_status=ready`
- 可进入最终人工签字或正式发布
- `signoff_status=attention`
- 说明现场已经接近完成,但仍应先清 attention 项
- `signoff_status=blocked`
- 本轮不应宣称收口完成
---
## 三、上线证据导出
### 1. 导出 bundle
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-export
```
这会生成一整包上线前证据。
建议至少保留:
- `00_env_audit.txt`
- `01_go_live_check_summary.txt`
- `02_go_live_summary.json`
- `03_stack_diagnosis.json`
- `04_driver_feed.json`
- `05_codex_brief.json`
- `06_release_launchpad.json`
- `manifest.json`
如果当前轮次涉及节点接管,建议额外保留:
- `agent_gap_export.json`
- `node_bootstrap_plan.txt`
- `node_acceptance_plan.json`
如果当前轮次涉及远端执行与日志回传,建议额外保留:
- `scene_log_*.txt`
- `doctor_decision.json`
### 2. 直接复核 bundle
```bash
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-review
```
如果你已经切到 Ops Center 页面,也可以直接看:
- 首屏 `总检决策`
- `总检主决策详情`
- API `GET /api/v1/ops/doctor-decision`
- 首屏 `交付证据`
- `交付证据详情`
- API `GET /api/v1/ops/go-live-bundle`
- 首屏 `正式复核`
- `正式复核详情`
- API `GET /api/v1/ops/go-live-review`
记录结果:
- `status`
- `headline`
- `critical_failures`
- `noncritical_failures`
- `launchpad_alignment.consistent`
- `env_audit.status`
- `env_audit.missing_items`
- `recommended_next_steps`
通过标准建议:
- `status=ready`
- 可进入最终人工确认或正式发布
- `status=attention`
- 核心报告已齐,但仍需复核补充失败项或环境缺口
- 也包括 `go_live_summary / stack_diagnosis / driver_feed / codex_brief` 的 launchpad 摘要出现不一致
- `status=blocked`
- 关键报告缺失,或环境审计已经判定阻断,不应直接宣称收口完成
如果 `env_audit.missing_items` 里出现:
- `missing_env:/etc/default/domaincheck-node-agent`
则这次 bundle review 已经不是泛泛地提示“环境缺口”,而是明确指向 Node Agent 接管还未收口。此时按下面顺序推进:
1. `agent-gap-export`
2. `node-bootstrap-plan`
3. 如果 summary 已提示 `runtime_may_need_restart=true`
4. 完成恢复后重新导出 bundle再做一次 `go-live-review`
### 3. 生成最终交付包
运行验证、bundle 复核都通过后,再生成最终交付包。
如果当前机器已经具备 smoke 运行条件,直接执行:
```bash
bash ./prepare_final_release.sh
```
如果当前机器只适合先做离线打包,可先跳过 smoke
```bash
DOMAINCHECK_SKIP_SMOKE_TEST=1 bash ./package_domain_release.sh
bash ./verify_domain_release.sh
```
后续再回到具备运行条件的机器上执行:
```bash
bash ./prepare_final_release.sh
```
最后统一查看最新交付结果:
```bash
bash ./show_latest_release.sh
```
重点只看:
- `latest_release.package_name`
- `latest_release.archive_path`
- `latest_release.sha256`
- `latest_release.smoke_test_ok`
- `final_release_ok`
- `final_release_report`
- `final_release_report_ok`
- `final_release_report_matches_latest`
- `final_release_report_stale_reason`
- `final_release_gate_decision`
- `final_release_gate_blocked_reasons`
- `final_release_gate_verify_ok`
- `final_release_gate_smoke_test_ok`
通过标准:
- `verify_domain_release.sh` 返回 `ok=true`
- `latest_release.smoke_test_ok=true`
- `final_release_ok=true`
- `final_release_report_matches_latest=true`
- `final_release_gate_decision=ready`
- `final_release_gate_verify_ok=true`
- `final_release_gate_smoke_test_ok=true`
- `final_release_report` 已指向最新一轮生成的正式报告
4. 先执行 `runtime-refresh-recover`
5. 再重新导出 bootstrap plan
---
## 四、最终交付结论模板
下面这段可以直接作为正式发布前的交付结论模板使用。
### 模板正文
```text
本轮发布前运行验证已完成。
一、统一收口结论
- go_live_status: <填写>
- publish_status: <填写>
- stack_status: <填写>
- automation_coverage.launch_status: <填写>
- launchpad_status: <填写>
二、默认下一步
- next_step_action_code: <填写>
- operator_title: <填写>
- launchpad_recommended_target_node_code: <填写>
- launchpad_recommended_recovery_label: <填写>
三、上线证据包
- bundle 路径: <填写>
- manifest 复核状态: <填写 ready/attention/blocked>
- go-live-review.headline: <填写>
- manifest.review_status_hint: <填写>
- critical_failures: <填写>
- noncritical_failures: <填写>
- manifest.launchpad_recommended_target_node_code: <填写>
- manifest.launchpad_recommended_recovery_label: <填写>
- manifest.launchpad_onboarding_bootstrap_pending_nodes: <填写>
- manifest.launchpad_onboarding_acceptance_ready_nodes: <填写>
- manifest.launchpad_alignment.consistent: <填写 true/false>
四、结论
- <填写:可进入正式发布 / 仍需继续收口 / 暂不可发布>
```
### 模板补充说明
填写“可进入正式发布”前,建议再做一次人工交叉确认:
- 发布门禁是否为 `ready` 或至少非 `blocked`
- 当前主车道是否已经明确
- 是否还存在 `dead_letter`
- 是否还有节点停留在 `bootstrap pending / acceptance pending`
- 是否已经保留可复盘的证据包与 manifest
---
## 五、交付给值班同事时最少要带什么
最少带下面 4 样:
1. `go-live-check` 摘要
2. `stack-diagnosis` 结果
3. `driver-feed / codex-brief` 结果
4. `go-live-export` 生成的 `manifest.json`
如果值班同事需要直接接手节点问题,再多带 3 样:
1. `node-acceptance-run` 最近结果
2. `log-sync-check` 最近结果
3. `queue-status``queue-records dead_letter` 最近结果
这样交班的人不需要重新从零拼现场。
---
## 六、真正的收工标准
如果要算“这次版本已经可以收工”,建议至少同时满足:
- 前端构建成功
- 海外单脑驾驶舱首屏状态正常
- `go-live-review.status != blocked`
- 发布门禁不为 `blocked`
- Node Agent 目标节点已完成接管验收
- 远端日志回传链可用或已确认本轮不依赖
- delivery queue 不存在未处理 `dead_letter`
- 当前默认下一步已经不是“继续补基础设施”,而是进入正式发布 / 观察 / 验收车道
到这一步,才适合说:
> 当前项目已经进入可上线、可交付、可持续运维状态。