a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
5.3 KiB
5.3 KiB
AI 合同平台 V2 发布质量门 CI 固化记录
日期:2026-07-03
目标
把本轮已经手工跑通的质量门固化为可重复执行的发布检查,减少后续依赖人工逐项复跑。
本次固化范围:
- 远端 runtime schema-check。
- Docker smoke deploy summary。
- 接口级 benchmark summary。
- GitHub Actions 手动 workflow。
新增内容
脚本:
yuqei-infra/scripts/run-release-quality-gate.py
Workflow:
.github/workflows/release-quality-gate.yml
文档:
yuqei-infra/README.md新增Release Quality Gate使用说明。
发布质量门语义
run-release-quality-gate.py 会生成统一 pass/fail summary:
- 实时请求 Contract API
/api/v1/runtime/schema-check。 - 实时请求 AI Platform API
/api/v1/runtime/schema-check。 - 校验 Docker smoke summary 是否为
pass,并确认关键检查项通过:remote_healthai_golden_sample_gateremote_db_checkreview_worker_smoke
- 校验接口 benchmark summary 是否为
pass,并确认所有场景passed=true且errors=0。
默认会读取最新 artifact:
project-docs/qa-artifacts/v2-smoke-docker-deploy/*/v2-smoke-docker-deploy-summary.jsonproject-docs/qa-artifacts/v2-interface-benchmark/*/interface-benchmark-summary.json
也可以显式指定 summary 路径。
本地验证
使用旧通过 benchmark summary 的兼容校验通过:
python yuqei-infra/scripts/run-release-quality-gate.py `
--web-base-url http://192.168.3.90:13000 `
--contract-api-base http://192.168.3.90:18100 `
--ai-api-base http://192.168.3.90:18101 `
--benchmark-summary project-docs/qa-artifacts/v2-interface-benchmark/2026-06-27T14-21-10/interface-benchmark-summary.json
结果:
V2_RELEASE_QUALITY_GATE_PASS- Artifact:
project-docs/qa-artifacts/v2-release-quality-gate/2026-07-03T19-20-59
语法检查:
python -m py_compile yuqei-infra/scripts/run-release-quality-gate.py
结果:通过。
实时 benchmark 分支
本次也验证了 --run-benchmark 分支。该分支会在 gate 内先执行:
python yuqei-infra/scripts/run-interface-benchmark.py ...
再用新生成的 interface-benchmark-summary.json 作为发布门输入。
早一轮 smoke 环境实时压测未通过,发布质量门正确拦截:
- Artifact:
project-docs/qa-artifacts/v2-release-quality-gate/2026-07-03T19-15-15 - 失败场景:
contract_listcontract_detailapproval_todounified_searchknowledge_chunks_hybrid_search
轻量复核:
- Artifact:
project-docs/qa-artifacts/v2-interface-benchmark/2026-07-03T19-quick-rerun - 合同列表、合同详情、审批待办在轻量复核中恢复到阈值内。
unified_search、knowledge_documents_search、knowledge_chunks_hybrid_search仍未达标。
结论:
- 发布质量门脚本本身已生效,能正确拦截实时 benchmark 失败。
- 搜索/RAG 检索性能修复后,已使用
--run-benchmark复跑发布质量门并通过。
最新通过结果:
- Artifact:
project-docs/qa-artifacts/v2-release-quality-gate/2026-07-11T17-02-36 - 命令:
python yuqei-infra/scripts/run-release-quality-gate.py --web-base-url http://192.168.3.90:13000 --contract-api-base http://192.168.3.90:18100 --ai-api-base http://192.168.3.90:18101 --run-benchmark - 结果:
V2_RELEASE_QUALITY_GATE_PASS - Docker smoke summary:
project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-07-11T14-47-14/v2-smoke-docker-deploy-summary.json - Interface benchmark summary:
project-docs/qa-artifacts/v2-release-quality-gate/2026-07-11T17-02-36/interface-benchmark/interface-benchmark-summary.json
最新实时压测关键结果:
| 场景 | p95 | 错误率 | 阈值 | 结果 |
|---|---|---|---|---|
| contract_list | 34.59 ms | 0% | 500 ms | 通过 |
| contract_detail | 20.03 ms | 0% | 500 ms | 通过 |
| approval_todo | 56.38 ms | 0% | 500 ms | 通过 |
| unified_search | 31.53 ms | 0% | 500 ms | 通过 |
| ai_trace | 93.10 ms | 0% | 1500 ms | 通过 |
| knowledge_documents_search | 215.87 ms | 0% | 800 ms | 通过 |
| knowledge_chunks_hybrid_search | 554.86 ms | 0% | 1500 ms | 通过 |
新鲜度控制
脚本新增可选参数:
--max-smoke-summary-age-hours 24
--max-benchmark-summary-age-hours 24
默认 0 表示不检查 artifact 年龄。上线前建议设置为 24 或更短,避免拿过旧 benchmark summary 放行。
CI 使用方式
GitHub Actions 新增手动 workflow:Release Quality Gate。
要求:
- 使用能访问
192.168.3.90的 self-hosted runner。 - 默认 runner label:
self-hosted, yuqei-smoke。 - checkout 使用
clean: false,用于保留 self-hosted runner 本地生成的 ignored QA artifacts。
可选输入:
web_base_urlcontract_api_baseai_api_basesmoke_summarybenchmark_summaryrun_benchmarkmax_smoke_summary_age_hoursmax_benchmark_summary_age_hours
后续任务
- 在 self-hosted runner 上注册或确认
yuqei-smokelabel,并确认 workflow 能访问192.168.3.90。 - 上线前使用
--run-benchmark或--max-benchmark-summary-age-hours 24跑一次强制新鲜 gate。 - Trace governance 的 24 小时 smoke 观察窗口仍列为上线前检查项,不阻塞当前交付收口。