Codex 修 CI 实战:GitHub Actions 失败 1 秒救回
Codex 修 CI 怎么配?讲透 Codex autofix-github-actions 工作流的搭建步骤、PR 自动修复、最佳实践,让 AI 帮你凌晨救火
30 秒了解:Codex 修 CI 到底救了你什么命
Codex 修 CI 的核心场景:你的 GitHub Actions 凌晨 3 点挂了,没人盯——Codex 自动读 build 日志、定位原因、改文件、提一个 fix PR、自己跑测试通过、等你早上 merge。 这是 AI 编程从「跟你坐一起的助手」走向「你睡觉时干活的远程同事」第一个真正能跑通的场景。
为什么 CI 是 AI 自动化的甜点?因为 CI 报错的特征非常适合 AI:
- 报错完整、有日志、可定位
- 大部分挂掉的原因是「依赖更新 / 配置漂移 / typo / 类型不匹配」这类机械问题
- 改法相对确定,不太依赖业务理解
- 验证简单——AI 改完跑 CI 通过就算对
这篇按 OpenAI cookbook 的 autofix-github-actions 例子 + 实践,给你一份「在自己 repo 接上 Codex 修 CI」的配置流程。如果你还没用过 Codex,先看 Codex 是什么。
准备工作:4 件事先备齐
1. GitHub 仓库 + 至少一条已有的 GitHub Actions workflow
Codex 自动修 CI 是基于「读已有 workflow 的失败日志」工作的,所以前提是你已经在 GitHub Actions 上跑 CI。完全没有 CI 的项目先去配一条最简单的 lint / test 工作流。
2. Codex 的 GitHub 集成权限
去 OpenAI 平台开启 Codex 的 GitHub App 集成,授权它访问你的目标仓库。它需要的权限:
- 读 Actions 日志(看哪里挂了)
- 读写文件(改 bug)
- 创建 PR(提交修复)
- 读 PR 评论(接收人类反馈)
3. 一个 Codex 的 API 凭证或服务账号
CI 自动修复跑在云端,需要凭证调 OpenAI API。两种方式:
- 用 OpenAI API key(按 token 计费)
- 用 Codex 服务集成(如果 OpenAI 给你提供了对应的 token 路径)
4. 团队达成共识
这一步很多人忽略。 「AI 自动提 PR 修 CI」涉及代码所有权——团队得提前讨论:哪些类型的 PR AI 可以自动 merge、哪些必须人 review。建议初期一律「自动提 PR + 人手动 merge」,跑顺再考虑放宽。
第 1 步:在 repo 加一个 autofix.yml 工作流
在 .github/workflows/codex-autofix.yml 加一个新工作流,监听其他工作流的失败事件:
name: Codex Autofix
on:
workflow_run:
workflows: ["CI", "Lint", "Test"]
types:
- completed
jobs:
autofix:
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
actions: read
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.workflow_run.head_branch }}
- name: Run Codex Autofix
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
FAILED_RUN_ID: ${{ github.event.workflow_run.id }}
run: |
npx @openai/codex autofix \
--run-id $FAILED_RUN_ID \
--branch $GITHUB_HEAD_REF \
--create-pr
关键点:
workflow_run触发器监听 CI / Lint / Test 三个工作流if: failure只在失败时跑(成功不浪费 token)permissions给到读 actions + 写文件 + 提 PR 三件套OPENAI_API_KEY在 repo 的 Settings → Secrets 里配好
第 2 步:配 Secrets
在 GitHub repo 页面:
- 进 Settings → Secrets and variables → Actions
- 点 New repository secret
- 名字填
OPENAI_API_KEY,值填你的 OpenAI API key - 保存
如果你团队用 GitHub Environments 分环境管理 secret,把 autofix job 限制到一个特殊 environment(比如 ai-tools),方便集中管控。
第 3 步:给 Codex 写 .codex/autofix-rules.md
Codex 自动修 CI 不是完全黑盒——你能写一份规则文件告诉它「哪些情况你可以改、哪些不要碰」:
# Codex Autofix Rules
## 可以自动修
- 依赖版本不兼容(package.json / package-lock.json / requirements.txt)
- TypeScript 类型错误
- Lint 规则违反(ESLint / Prettier / Ruff)
- 简单的 test snapshot 更新
- import 路径错误
- 拼写错误
## 不要碰
- 业务逻辑代码(除非 fix 测试明确需要)
- 数据库 migration 文件
- CI/CD 配置(除非 workflow 本身错了)
- secrets / 环境变量
- src/legacy/ 目录
## PR 描述要包含
1. 简短的根因分析
2. 改了什么文件、为什么这样改
3. 风险点(如果有)
4. 建议人审核重点
## 默认行为
- 提 PR 标题前缀:[Codex Autofix]
- 提到 reviewer:@infra-team
- 加 label:codex, autofix
这份规则文件相当于 CLAUDE.md 怎么写 思路在「自动修 CI」场景的特化版本——告诉 AI「边界在哪」,比纯指望默认行为靠谱得多。
第 4 步:第一次试跑 + 复盘
故意挂一次 CI 测试自动修复链路。最简单的办法:
- 新建一个 branch
test-autofix - 故意改一个文件触发类型错误(比如把一个变量删掉但保留 import)
- push、开 PR
- 等 CI 跑、看 Codex Autofix 工作流是不是自动触发
- 看 Codex 提的 PR 是不是修对了
第一次跑大概率有意外——permissions 不够、规则没读到、PR 没自动提。按报错调整 yaml 和规则,第二次就稳了。
第 5 步:审 Codex 提的 PR 时看什么
Codex 自动提的 PR 不要无脑 merge。审 PR 看 4 项:
1. 改动范围对不对
git diff main..pr-branch --stat
只动了报错相关的文件吗?还是顺手改了其他?如果改了不相关文件,理由要在 PR description 里能找到,否则关掉。
2. 改法是不是「最小修复」
理想的 autofix 是「精准小改」。如果 Codex 重构了一大块,警惕——可能它「自由发挥」了。
3. 测试是不是真的全绿
PR 上 CI 必须全绿。如果绿了但你不信,本地 checkout 跑一遍。
4. PR description 写没写清楚
好的 Codex PR 长这样:
[Codex Autofix] Fix TypeScript error in UserService.ts
## 根因
src/services/UserService.ts 第 47 行调用 .toLowerCase() 时
userName 可能是 undefined,触发 TS2532 错误。
## 改法
加了 optional chaining:userName?.toLowerCase() ?? ''
## 风险
低——只改了一处、不影响外部签名、原有测试全绿。
## 建议审核重点
确认 userName 为 undefined 时返回空字符串的语义是否符合业务预期。
如果 PR description 是空的或全是泛泛而谈,让 AI 重写一遍。
5 个高频场景能 autofix 吗?
| 场景 | 适合自动修 | 备注 |
|---|---|---|
| npm 依赖版本冲突 | ✅ | Codex 最擅长 |
| TypeScript 类型错误 | ✅ | 大部分能自动修 |
| ESLint / Prettier 失败 | ✅ | 几乎都能 |
| 测试 snapshot 过期 | ✅ | 简单情况能 |
| 业务测试真的挂了 | ⚠️ | AI 容易「改测试不改代码」要警惕 |
| 集成测试连不上数据库 | ❌ | 多半是环境问题 AI 修不了 |
| 性能回归测试挂 | ❌ | 需要业务判断 |
| 安全扫描发现漏洞 | ⚠️ | 简单的可以,复杂的要人审 |
配套:每周「Codex Autofix 复盘」
接上 autofix 不是装完就完事。每周看一次「Codex 这周修了哪些 / 哪些 PR 被关掉了 / 哪些 merge 后又 revert」,用这些数据调整规则。
简单的复盘 prompt:
本周 Codex Autofix 共提了 X 个 PR。请帮我做一份复盘:
我会贴 PR 列表和最终状态。请:
- 分类统计:merge 了几个、关闭几个、还 open 几个
- 找规律:什么类型的修复 Codex 表现好、什么类型经常被关
- 基于规律,给 .codex/autofix-rules.md 改进建议
- 输出一份新版 rules 草稿
这种「数据驱动调规则」的循环 4-6 周后,你的 Codex Autofix 命中率能稳定到 70-80%。
常见坑 + 解决办法
| 现象 | 原因 | 解决 |
|---|---|---|
| Autofix 工作流不触发 | workflow_run 名字写错 | 检查 workflows: 数组对应实际工作流 name |
| Codex 提 PR 但是空 | permissions 不够 | 加 contents: write |
| PR 触发新的 CI 又挂 | autofix 本身有 bug | 看 autofix job 日志,多半是 prompt 没说清 |
| Codex 反复修同一个东西 | 没真正修好 | 关掉 autofix,人审一次找根因 |
| API 用量爆 | 工作流触发太频繁 | 加 if: failure 限制、加 debounce |
Codex 修 CI vs 让 Claude Code 帮你修
| 维度 | Codex Autofix(云端) | Claude Code(本机) |
|---|---|---|
| 触发方式 | CI 挂自动触发 | 你看到挂了才本机跑 |
| 你在不在线 | 不需要 | 需要 |
| 适合场景 | 凌晨 / 周末 / 你睡觉时 | 工作时间你主导 |
| 修复速度 | 5-15 分钟提 PR | 你互动几分钟 |
| 风险 | 中(无人在场) | 低(你盯着) |
详见 Claude Code 高级技巧 里也有「本机 fix CI」的版本。
下一步
- Codex 整体介绍 → Codex 是什么
- Codex CLI 上手 → Codex CLI 怎么用
- Codex 改老代码 → Codex 改写老代码
- Codex 长任务规划 → Codex PLANS.md 怎么写(待发布)
- Codex Code Review → Codex Code Review 工作流(待发布)
- Claude Code 高级技巧 → Claude Code 高级技巧
- AI 编程全景 → AI 写代码完全指南
常见问题
Q:Codex 自动改我的代码、提 PR,公司允许吗? A:这是个治理问题,不是技术问题。建议「自动提 PR + 人手动 merge」起步——AI 拿不到 merge 权,所有改动都过人手,合规风险可控。跑顺 1-2 个月再考虑放宽。
Q:Codex Autofix 一个月会花多少 OpenAI API 钱? A:取决于你 CI 挂多频繁、改动多大。一个中等活跃的项目每月几十到几百美元的级别。如果一周挂几百次,要么先修 CI 本身的稳定性问题,要么会破产。
Q:能不能限制 Codex 只在工作时间外跑?
A:可以。在 yaml 加 if 条件判断小时:
if: ${{ github.event.workflow_run.conclusion == 'failure' && (github.event.workflow_run.updated_at... ) }}
但实际操作建议:白天人在场也让 Codex 跑,反正它提 PR 不直接 merge——你看到了人审,没看到就当 backup。
Q:Codex 修不了的怎么办? A:它会在 PR description 写「我尝试了 X 但失败,建议人来 debug」。这种 PR 当告警看——告诉你「这是个超出 AI 能力的真 bug,赶紧人介入」。
Q:跟 Renovate / Dependabot 冲突吗? A:互补。Dependabot 自动升级依赖;Codex 修依赖升级后的连带 bug。两者一起用很好——Dependabot 提 PR 触发 CI 挂、Codex 自动修,形成「依赖自动升级 + 自动修复」的串联工作流。