16 KiB
26 domainCheck 发布前运行验证与交付模板
一、这份模板怎么用
这份文档不是设计说明,而是正式发布前最后一轮执行模板。
适用场景:
- 海外单脑控制面已经搭好
- 大陆节点已经接入或正在收口
- 代码已经更新到待发布版本
- 现在要做最后一轮运行验证、证据留存、交付确认
这份模板分成 3 段:
- 发布前运行验证
- 上线证据导出
- 最终交付结论模板
二、发布前运行验证
1. 先跑统一收口摘要
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_statuspublish_statusblocking_reasonswarningsnext_step_action_codeoperator_titlelaunchpad_recommended_target_node_codelaunchpad_recommended_recovery_labellaunchpad_recommended_recovery_summarylaunchpad_onboarding_bootstrap_pending_nodeslaunchpad_onboarding_acceptance_ready_nodes
通过标准:
go_live_status != blockedpublish_status != blocked
1.5 先看环境差异是否已收口
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
重点只看:
statusheadlinepython.pytest_installed / fastapi_installed / uvicorn_installedpython.runtimesservicesruntime.preflight_okruntime.readiness_statusruntime.route_surface_completemissing_itemstooling_items
通过标准建议:
status != blockedruntime.preflight_ok=trueroute_surface_complete=true- 如果
missing_items里仍有关键基础项,先补环境,再继续业务复核 - 如果只有
tooling_items,可以继续上线复核,但建议后补本机工具链 - 如果
runtime.runtime_may_need_restart=true- 不要直接继续接管或发布链
- 先按
runtime-refresh-recover给出的固定顺序完成 API 重启与复检
- 如果你希望把这一轮“重启 + 总检 + 默认下一步 + 上线摘要”压成一次复核
- 直接执行
go-live-recover
- 直接执行
1.6 先看托管节点接入面是否清楚
bash domain-api/deploy/multi-region/drive_ops_center.sh nodes http://127.0.0.1:8100
重点只看:
summary.agent_readysummary.ssh_readysummary.remote_access_readysummary.remote_access_state_counts- 每台节点的
agent_state - 每台节点的
remote_access_state - 每台节点的
ssh_access_label - 每台节点的
ssh_entry
通过标准建议:
- 如果某台节点还是
agent_pending- 先确认是否已经保存 SSH 入口
- 如果节点尚未保存 SSH 入口,但你已经决定由海外控制面统一接管
- 先补录:
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 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 domain-api/deploy/multi-region/drive_ops_center.sh stack-diagnosis
记录结果:
stack_statusissuesnext_stepquick_commands
通过标准:
stack_status != blockedissues里没有未处理的关键阻断项
3. 再看驾驶主线
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_recommendationautomation_coveragerecommended_behaviorfocussummary.launchpad_recommended_target_node_codesummary.launchpad_recommended_recovery_labelsummary.launchpad_onboarding_bootstrap_pending_nodessummary.launchpad_onboarding_acceptance_ready_nodes
通过标准:
automation_coverage.launch_status != blocked- 默认下一步已经明确
- 如果
summary.launchpad_recommended_target_node_code非空- 值班同事应能直接知道当前卡在哪台节点
- 不需要再回 launchpad 明细手工翻 gap rows
4. 若涉及发布,再看 Release Hub
bash domain-api/deploy/multi-region/drive_ops_center.sh release-launchpad
记录结果:
launchpad_statusrecommended_action_codedefault_rollout_gate_statusrecommended_target_node_coderecommended_recovery_labelrecommended_recovery_summaryonboarding_bootstrap_pending_nodesonboarding_acceptance_ready_nodes
通过标准:
launchpad_status != blockeddefault_rollout_gate_status != blocked
特殊判读:
- 如果
recommended_action_code=api-restart- 不要误判成“节点没接好”
- 这更像是运行中的控制面 API 还没刷新到当前仓库的最新运维能力
- 应先执行:
bash domain-api/deploy/multi-region/drive_ops_center.sh runtime-refresh-recover
- 然后重新跑:
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 domain-api/deploy/multi-region/drive_ops_center.sh node-acceptance-plan http://127.0.0.1:8100 mainland-worker-01
确认无误后执行:
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_codestatuschecksblocking_issueswarningsrecommended_next_step
通过标准:
status != blocked- 没有未处理的
blocking_issues - 目标节点已经不再停留在“bootstrap pending / acceptance pending”
6. 若涉及远端执行,补跑日志回传验证
如果当前版本准备进入:
- 多机值班
- 海外单脑统一接管
- 远端动作回执与现场日志复核
则需要确认日志回传链已经可用,而不是只看节点在线。
先检查:
bash domain-api/deploy/multi-region/drive_ops_center.sh log-sync-check
如果存在缺口,再执行恢复:
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 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_enabledline_countsource_nodesmissing_nodesscene_log.status
通过标准:
- 关键节点已出现在
source_nodes missing_nodes不包含当前发布主车道节点- 如需人工复核现场,
scene-node-log能取到有效日志
7. 若涉及 Node Agent 交付,补看队列健康
如果这轮发布已经进入“控制面发动作、节点拉任务、节点回执结果”的模式,就必须确认 delivery queue 没有假健康。
先看队列摘要:
bash domain-api/deploy/multi-region/drive_ops_center.sh queue-status http://127.0.0.1:8100 mainland-worker-01
如果怀疑有堆积或死信,再看明细:
bash domain-api/deploy/multi-region/drive_ops_center.sh queue-records http://127.0.0.1:8100 mainland-worker-01 dead_letter
如需重放:
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.summarydead_letterretryingpendingreplayed_count
通过标准:
dead_letter=0- 没有持续增长的
retrying - 队列不处于异常堆积状态
注意:
dead_letter > 0时,不应宣称“可正式发布”- 这种情况至少按
publish_status = blocked处理
8. 最后跑一次 doctor 结论
前面的检查是分面复核,最后还要再收成一句话,让交班、值班、Codex 驾驶员看到同一结论。
bash domain-api/deploy/multi-region/drive_ops_center.sh doctor-decision
记录结果:
statusdecisionrecommended_commandsrecommended_reading_orderlaunchpad_alignment
通过标准:
status != blockeddecision与前面的go-live-check / stack-diagnosis / release-launchpad不冲突recommended_commands已经指向明确的下一跳,而不是泛化排查
9. 若希望直接生成“可否签字上线”的最终摘要
如果你不想手工再拼:
- bundle review
- doctor 结论
- 发布门禁
可以直接执行:
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-signoff
如果已经有现成证据包,也可以直接基于 manifest 输出:
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-signoff /path/to/go-live-bundle
这一步现在不是“另一套单独判断”,而是固定复用:
go-live-reviewdoctor-decisiongo-live-summary / 发布门禁 / launchpad 摘要
也就是说,页面首屏、CLI 和海外 Codex 看到的最终签收结论,已经开始共享同一份签字口径。
重点只看:
signoff_statusheadlinerelease_gateblocked_reasonsattention_reasonsdecisionrecommended_commands
通过标准:
signoff_status=ready- 可进入最终人工签字或正式发布
signoff_status=attention- 说明现场已经接近完成,但仍应先清 attention 项
signoff_status=blocked- 本轮不应宣称收口完成
三、上线证据导出
1. 导出 bundle
bash domain-api/deploy/multi-region/drive_ops_center.sh go-live-export
这会生成一整包上线前证据。
建议至少保留:
00_env_audit.txt01_go_live_check_summary.txt02_go_live_summary.json03_stack_diagnosis.json04_driver_feed.json05_codex_brief.json06_release_launchpad.jsonmanifest.json
如果当前轮次涉及节点接管,建议额外保留:
agent_gap_export.jsonnode_bootstrap_plan.txtnode_acceptance_plan.json
如果当前轮次涉及远端执行与日志回传,建议额外保留:
scene_log_*.txtdoctor_decision.json
2. 直接复核 bundle
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
记录结果:
statusheadlinecritical_failuresnoncritical_failureslaunchpad_alignment.consistentenv_audit.statusenv_audit.missing_itemsrecommended_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 接管还未收口。此时按下面顺序推进:
agent-gap-exportnode-bootstrap-plan- 如果 summary 已提示
runtime_may_need_restart=true - 完成恢复后重新导出 bundle,再做一次
go-live-review
3. 生成最终交付包
运行验证、bundle 复核都通过后,再生成最终交付包。
如果当前机器已经具备 smoke 运行条件,直接执行:
bash ./prepare_final_release.sh
如果当前机器只适合先做离线打包,可先跳过 smoke:
DOMAINCHECK_SKIP_SMOKE_TEST=1 bash ./package_domain_release.sh
bash ./verify_domain_release.sh
后续再回到具备运行条件的机器上执行:
bash ./prepare_final_release.sh
最后统一查看最新交付结果:
bash ./show_latest_release.sh
重点只看:
latest_release.package_namelatest_release.archive_pathlatest_release.sha256latest_release.smoke_test_okfinal_release_okfinal_release_reportfinal_release_report_okfinal_release_report_matches_latestfinal_release_report_stale_reasonfinal_release_gate_decisionfinal_release_gate_blocked_reasonsfinal_release_gate_verify_okfinal_release_gate_smoke_test_ok
通过标准:
verify_domain_release.sh返回ok=truelatest_release.smoke_test_ok=truefinal_release_ok=truefinal_release_report_matches_latest=truefinal_release_gate_decision=readyfinal_release_gate_verify_ok=truefinal_release_gate_smoke_test_ok=truefinal_release_report已指向最新一轮生成的正式报告
- 先执行
runtime-refresh-recover - 再重新导出 bootstrap plan
四、最终交付结论模板
下面这段可以直接作为正式发布前的交付结论模板使用。
模板正文
本轮发布前运行验证已完成。
一、统一收口结论
- 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 样:
go-live-check摘要stack-diagnosis结果driver-feed / codex-brief结果go-live-export生成的manifest.json
如果值班同事需要直接接手节点问题,再多带 3 样:
node-acceptance-run最近结果log-sync-check最近结果queue-status或queue-records dead_letter最近结果
这样交班的人不需要重新从零拼现场。
六、真正的收工标准
如果要算“这次版本已经可以收工”,建议至少同时满足:
- 前端构建成功
- 海外单脑驾驶舱首屏状态正常
go-live-review.status != blocked- 发布门禁不为
blocked - Node Agent 目标节点已完成接管验收
- 远端日志回传链可用或已确认本轮不依赖
- delivery queue 不存在未处理
dead_letter - 当前默认下一步已经不是“继续补基础设施”,而是进入正式发布 / 观察 / 验收车道
到这一步,才适合说:
当前项目已经进入可上线、可交付、可持续运维状态。