ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HIXL 流水线失败详情排查实战:OpenLiBing(SPA)页面定位 codecheck 与编译/LLT 失败根因

HIXL 流水线失败详情排查实战:OpenLiBing(SPA)页面定位 codecheck 与编译/LLT 失败根因 HIXL 流水线失败详情排查实战OpenLiBingSPA页面定位 codecheck 与编译/LLT 失败根因【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl本篇技术指南面向在 cann/hixl 仓库上提交 PR 并跟进 CI 的开发者讲解如何通过 GitCode PR 流水线的失败详情入口——OpenLiBingSPA 单页应用——精确定位 codecheck 规则违规、编译错误与 LLT 用例失败的具体位置规则 ID、文件、行号、失败用例。读完本文你将掌握从 PR 评论中批量提取 OpenLiBing 链接、用浏览器自动化读取 SPA 页面 DOM、区分根因失败与级联失败并联动gitcode-pipelineskill 完成「触发 → 轮询 → 失败定位 → 最小修复 → 重触 CI」的完整闭环。背景为什么流水线失败详情要另开一扇门cann/hixl 的 PR 流水线由 GitCode 托管流水线的是否在跑、是否通过这类状态信息可以通过 REST API 获得见 gitcode-pipeline skill 的gp-list/gp-wait等封装脚本。但流水线的具体失败原因——codecheck 规则、编译 stderr、LLT 用例输出——托管在 OpenLiBing当前文档原文链接的前端页面中由 cann-robot 机器人评论嵌入 GitCode PR 页面。这里的关键技术约束是OpenLiBing 是一个 SPASingle Page Application。静态 HTTP 手段curl、普通网页抓取、仅 REST API拿不到有效内容因为页面 DOM 需要浏览器执行 JavaScript 渲染后才能生成。因此必须使用 Agent 的浏览器自动化能力打开并读取页面 DOM各产品名称不同按当前 Agent 可用的浏览器工具执行。这条约束与 hixl-dev skill 第 6 节「CI 跟进与低级错误修复」中的要求一致失败时打开 OpenLiBing 读取规则/日志不要 curl SPA 页面。信息分工状态看 API详情看浏览器在深入 OpenLiBing 之前先明确各渠道的信息边界避免在错误的地方浪费力气信息获取方式是否在跑 / 是否通过gitcode-pipelinelabel、gp-list/gp-wait等触发 / 重试流水线gitcode-pipeline评论compile或 retry 脚本codecheck 规则、文件行号、编译/LLT 详情浏览器打开 OpenLiBing其中流水线的最终通过状态以 PR Labelci-pipeline-passed为权威依据流水线statussuccess可能是旧 SHA 的结果只有ci-pipeline-passedlabel 才能证明最新代码已通过 CI。这一判断逻辑在 gitcode-pipeline skill 的「步骤 1检查 PR Label」中有明确说明。当 label 不存在、流水线又处于 failed/canceled 状态时才进入本文的核心环节——用浏览器读 OpenLiBing 失败详情。第一步从 PR 评论提取 OpenLiBing 链接流水线跑完后cann-robot 会把失败详情的链接以评论形式发到 PR 上。GitCode 提供 PR 评论 REST API可以用以下命令批量提取 pipeline 与 codecheck 两类链接PRPR_NUMBER curl -sS -H PRIVATE-TOKEN: $GITCODE_API_TOKEN \ https://api.gitcode.com/api/v5/repos/cann/hixl/pulls/${PR}/comments?per_page50 \ | python3 -c import sys, json, re base https://www.openlibing.com/apps/ qs ?projectId300033codeHostingPlatformFlaggitcode for c in reversed(json.load(sys.stdin)): body c.get(body, ) for pat, label in [ (rpipelineDetail/[^\\\s], pipeline), (rentryCheckDashCode/[^\\\s], codecheck), ]: m re.search(pat, body) if m: print(f{label}: {base}{m.group(0)}{qs}) 这段脚本的逻辑可以拆解如下接口与鉴权调用 GitCode 的 Pull Request 评论列表接口通过PRIVATE-TOKEN请求头携带GITCODE_API_TOKEN该环境变量也是gitcode-pipeline全部封装脚本的前置依赖见 gitcode-pipeline skill 的「环境变量」一节倒序遍历评论reversed(...)让输出顺序与评论时间保持一致便于按序理解流水线的演进正则提取路径片段评论正文中形如pipelineDetail/...与entryCheckDashCode/...的路径片段对应两类 OpenLiBing 详情页分别标记为pipeline与codecheck拼接完整 URL统一以https://www.openlibing.com/apps/为前缀并追加?projectId300033codeHostingPlatformFlaggitcode查询参数这是 cann/hixl 流水线在 OpenLiBing 上的项目标识与平台标识。除 PR 评论外也可以直接打开https://gitcode.com/cann/hixl/pull/PR/check页面——同样是 SPA需要浏览器读取。这里提到的 API Token 鉴权方式与 gitcode-pr skill 所引用的 GitCode API 摘要 保持一致。第二步浏览器排查步骤核心流程拿到链接后用浏览器的自动化能力按以下顺序排查对应 hixl-dev skill 第 6 节的「失败时按 openlibing.md 用浏览器能力读取规则/日志」打开链接打开 codecheck 或 pipeline 的 OpenLiBing 链接或 PR 的/check页等待渲染等待页面渲染完成出现阶段名、规则表或日志区域。SPA 页面存在异步加载过早抓取 DOM 会得到空壳页面定位最早失败点定位最早失败的 stage / 规则记录规则 ID、文件、行号或失败用例名区分失败类型区分根因失败与前序失败导致的级联取消。这条原则与 gitcode-pipeline skill 的失败分析逻辑互为印证该 skill 要求「只有确认某个 Job 的失败是另一个 Job 失败的级联结果时如子流水线 detail 返回 null/statusnull才可在报告中标注为级联失败但仍需给出证据」修复并重试按本 skill 做最小修复与本地验证再更新 PR 分支并重新触发 CI。本地验证环节请遵循 hixl-dev skill 的硬性要求通过bash tests/run_test.sh -t cpp -s suite跑最小受影响范围修改生产 C 时给出增量覆盖率结论。阻塞情况处理无浏览器能力、无登录权限或日志过期时如实报告阻塞不要臆测失败原因。这与 gitcode-pipeline skill 的「禁止未定位根因就重触发 CI」原则一致——未定位到具体失败用例、未分析出根因之前禁止重触发流水线。纵深解析OpenLiBing 链接背后的流水线失败定位链OpenLiBing 详情页展示的失败 Job本质上是 gitcode-pipeline skill 所描述的多级流水线结构的可视化。理解这条定位链有助于在浏览器里更快地找到真正失败的叶子 Job主流水线cann_ge_all等主流水线包含多个阶段如「获取pr文件」「子流水线」「后处理阶段」。阶段间串行前面阶段失败则后续阶段不执行阶段内 Job 并发子流水线穿透任务类型为official_devcloud_subPipeline的 Job如 compile、llt、static-check内部还嵌套子流水线需要穿透到子流水线里再找失败 Job日志窗口编译类 Job 日志可达 10MB错误信息集中在日志末尾应倒序取最后一页再 grep 关键词error/fatal/fail。这条链路在仓库中有对应的自动化封装gp-analyze-failure.sh 会自动穿透子流水线层级、拉取所有失败 Job 的日志摘要并保存到pipeline_logs/目录gp-log.sh 则以sort: desc倒序获取日志末尾 500 行并提取error/fatal/failed/FAIL相关行。当浏览器不可用或需要批量确认多个失败 Job 时可以先跑这两个脚本做第一轮筛选再用浏览器到 OpenLiBing 页面核对规则详情。失败分类与处理策略从 OpenLiBing 页面读取到失败详情后按 gitcode-pipeline skill 的「步骤 6分析日志并报告」分类处理错误类型处理方式编译错误.cc文件 error 行号 make错误报告具体文件和行号 → 修复代码后 push 并重触 CIUT/ST 执行错误tests passed/tests failed/ CTest 汇总报告失败用例 → 从全量日志搜索[ FAILED ]定位具体 gtest case覆盖率不足报告覆盖率缺口 → 用gp-cov.sh获取增量覆盖率报告定位未覆盖行后补用例代码告警评估是否误报已知环境问题、与本次修改无关的历史告警、静态分析工具误判 → 判断为误报则停止修复尝试非误报则修复后重触 CI环境/基础设施错误已知报告用户后停止环境/基础设施错误偶发用 API retrygp-api-retry.sh精准重跑不产生多余记录需要特别强调的是codecheck 规则失败这是 OpenLiBing 详情页中非常常见的一类失败页面会给出规则 ID、具体文件与行号属于规则明确、可本地复现的低级错误正适合按照本文开头的流程浏览器读详情 → 本地修复 → 本地验证 → 更新 PR 分支 → 重触 CI。修复时如需自检公开头文件的 Doxygen 注释规范可参考 hixl-review skill 的 header-comment-spec涉及公开接口符号时还需按 C ABI 兼容性编码规范 自检。完整闭环从失败定位到重新提交将本文的方法与既有 skill 串起来一次完整的 CI 失败修复闭环如下PR 流水线失败gp-list / gp-wait 轮询发现 ↓ 从 PR 评论提取 OpenLiBing 链接本文第一步的脚本 ↓ 浏览器自动化打开 OpenLiBing读取 codecheck 规则 / 编译 stderr / LLT 用例 ↓ 定位最早失败点区分根因失败与级联取消 ↓ 可选gp-analyze-failure.sh 批量拉取失败 Job 日志摘要交叉验证 ↓ 本地最小修复 → bash tests/run_test.sh -t cpp -s suite 验证 → 增量覆盖率评估 ↓ 更新 PR 分支并重新触发流水线gp-trigger.sh / gp-api-retry.sh ↓ 轮询至 ci-pipeline-passed label 出现 → 报告通过关键约定与注意事项SPA 不可 curlOpenLiBing 及gitcode.com/.../pull/PR/check均为 SPA必须用浏览器自动化读取 DOM静态 HTTP 拿不到内容状态与详情分离是否通过以ci-pipeline-passedlabel 为准见 gitcode-pipeline skill具体失败原因以 OpenLiBing 页面为准多 Job 失败逐个分析同一阶段内可能有多个并行 Job如 compile 和 llt每个 FAILED Job 都必须独立分析禁止跳过只有确认级联关系时才可标注为级联失败且必须给出证据不臆测、不空跑无浏览器能力、无登录权限或日志过期时如实报告阻塞未定位根因前禁止重触发 CIToken 前置评论 API 与gitcode-pipeline全部脚本均依赖GITCODE_API_TOKEN环境变量需提前export GITCODE_API_TOKENyour_token_here。【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表