SuperAPI AI 工具集

fix-buildkite-ci

部署与运维

查看项目

更新于 10-16 02:10

技能介绍

用途

fix-buildkite-ci 用于诊断和修复 RisingWave 项目中失败的 Buildkite CI 检查。其目标是避免仅凭 UI 截图猜测问题,而是通过结构化 JSON 和产物检查,定位确切的失败测试用例和不匹配内容,然后实施最小的正确修复。

目标选择

排查目标按以下优先级确定:

  1. 若用户提供 Buildkite 构建 URL,直接使用该构建。
  2. 否则,若用户指定分支和/或流水线(例如 pull-request、main-cron),使用指定范围。
  3. 否则,默认使用当前 git 分支,并检查与该分支关联 PR 的检查。

工作流程

  • 识别失败的 Buildkite 构建。
  • 获取构建 JSON 并列出失败的任务。
  • 拉取任务日志并提取第一个具体失败信号。
  • 当顶层日志被截断时,检查产物。
  • 将失败映射到根因并应用聚焦修复。
  • 在可行时进行本地验证并汇总证据。

优先使用 bk CLI。若认证不可用,通过 curl 使用公开的 Buildkite JSON/日志/产物端点。具体命令和端点模式参见 references/buildkite-ci-triage.md。

步骤

步骤 1:识别失败的 Buildkite 检查

未指定明确目标时,先找到当前分支对应的 PR,然后运行 gh pr checks <PR_NUMBER> 找出失败的检查并捕获 Buildkite URL(.../builds/<N>)。

若用户指定分支/流水线,使用这些参数通过 bk build list 列出并过滤构建。若用户提供 Buildkite 构建 URL,跳过发现阶段,直接从该构建号开始。

步骤 2:拉取构建 JSON 与失败任务

获取 builds/<N>.json,然后按非零 exit_status 列出失败任务。至少捕获:

  • pipeline
  • build number
  • job id
  • job name
  • exit status

步骤 3:提取具体失败

获取每个失败任务的日志,搜索高信号模式:

  • query result mismatch
  • [Diff] (-expected|+actual)
  • query is expected to fail with error:
  • panic/assertion 行
  • 确定性模拟错误标记
  • OOM/超时/取消标记

一旦获得一个具体失败文件/用例和不匹配内容即停止。

步骤 4:回退到产物

若日志只显示包装错误(例如 command exited with status),检查同一任务的产物,尤其是:

  • risedev-logs.zip
  • risedev-logs/nodetype-*.log

解压并搜索产物日志中的确切不匹配。

步骤 5:应用聚焦修复

优先采用与证据关联的最小修复:

  • SQLLogicTest 不匹配:仅当查询输出变更为预期行为时,更新正确的 .slt/.slt.part 文件中的期望部分。
  • 运行时行为错误:修复源代码,保持测试不变。
  • 仅 Flaky/取消信号(143):视为基础设施/取消问题,除非有产品错误佐证。
  • 避免在没有根因证据的情况下进行宽泛的“重试并祈祷”操作。

步骤 6:验证并报告

尽可能运行最窄的本地检查来验证修复。若无法进行完整验证,明确说明。

始终报告:

  • 失败的检查/构建/任务标识
  • 失败的文件/测试/用例
  • 确切的不匹配/错误证据
  • 应用的修复(更改的文件)
  • 验证状态和剩余风险

Buildkite 特定启发式

  • 退出代码 105:通常是 docker-compose/插件的包装失败;检查 SLT/e2e 日志寻找真正的不匹配。
  • 退出代码 4:常见于模拟/恢复步骤;检查上传的模拟日志。
  • 退出代码 143:通常是取消/终止,而非确定性产品回归。
  • JSON 中的 raw_log_url 可能为 null;使用按 job id 指定的显式任务日志端点。
  • 优先使用 JSON 端点加 jq;避免抓取大型 HTML 页面。