使用案例 · CI

让 Codex 从失败日志定位测试和 CI 问题

从准确的工作流运行、失败步骤和环境差异出发,复现问题并提交最小修复。

CI 失败先找准是哪一次运行。把仓库、分支、提交 SHA、工作流名称、失败任务和失败步骤交给 Codex。只复制最后一行报错,常会丢掉真正有用的安装版本、前置警告和执行命令。

沿着运行记录向上看

GitHub Actions 为每次工作流运行保存任务与步骤日志。网页可以打开运行详情,GitHub CLI 也能用 gh run list 找近期运行,再用 gh run view RUN_ID --verbose 看步骤,或用 gh run view --job JOB_ID --log 读取完整任务日志。

先判断失败发生在触发条件、依赖安装、编译、测试、产物上传还是部署。任务意外跳过时,GitHub 官方建议查看日志归档里的条件表达式求值结果。普通日志不足时再开启调试或工具的 verbose 输出,避免一开始就被大量噪声淹没。

让 Codex 从失败日志定位测试和 CI 问题的入口、目标与准备条件操作示意图
图 1 · 进入任务前先确认目标、范围和准备条件

把远端环境带回本地

读取工作流文件,核对操作系统、运行时版本、包管理器、缓存键、环境变量名称和执行目录。用工作流里的原命令本地复现,锁文件安装也要保持一致。错误只在 CI 出现时,优先比较大小写敏感路径、时区、并发、权限和缺失服务,不要靠重复重跑掩盖不稳定测试。

让 Codex先解释第一处失败怎样传到后续步骤,再改最小范围。依赖下载失败、测试断言失败和密钥缺失需要完全不同的处理。不要为了变绿而删除断言、扩大超时或把失败步骤设成允许失败,除非仓库明确把它定义为非阻断检查。

让 Codex 从失败日志定位测试和 CI 问题的三步关键操作与请求骨架示意图
图 2 · 把关键操作拆成三步,并给每一步留下可观察结果

用同一提交完成复查

修复后先运行失败步骤的本地等价命令,再跑相邻检查和完整测试。推送到原分支以后,确认新的工作流运行对应最新提交 SHA。GitHub 的必需状态检查只有达到成功、跳过或中立状态才允许受保护分支继续合并,具体规则由仓库管理员配置。

Codex 可以用 /review 检查当前分支相对基础分支的差异。审查重点放在修复是否解释原日志、工作流配置是否仍保持最小权限,以及新增测试能否稳定复现旧故障。

让 Codex 从失败日志定位测试和 CI 问题的结果验收与交付证据清单示意图
图 3 · 用结果、检查与交付证据确认任务真的完成

区分确定失败和偶发失败

同一提交在相同环境每次都停在同一断言,先查代码与固定配置。失败位置漂移,或重跑后自己恢复,就检查共享端口、测试顺序、随机种子、并发写入和外部服务。把失败测试单独运行,再与相邻测试交换顺序,可以快速判断是否存在状态泄漏。

缓存也是常见变量。先看工作流实际命中的缓存键和恢复记录,再做一次不使用缓存的对照运行。无缓存运行通过,只能说明缓存值得继续查,不能立刻删除所有缓存。依赖锁文件、生成产物和运行时版本仍要逐项比较。

需要输出更多日志时,只记录诊断所需字段。密钥、请求头、用户数据和完整环境变量不能进入 Actions 日志。问题解决后撤掉临时调试输出,防止后续运行持续暴露信息或增加费用。

交付记录要保留失败运行链接、根因、修改文件、本地命令和最新 CI 结果。若远端检查仍在运行,就写“已推送,CI 进行中”,不要提前写成完成。

官方参考