🤖 AI 跟我学 新手入门

Codex 修 CI 实战:GitHub Actions 失败 1 秒救回

Codex 修 CI 怎么配?讲透 Codex autofix-github-actions 工作流的搭建步骤、PR 自动修复、最佳实践,让 AI 帮你凌晨救火

发布 2026/05/19 📎 参考官方文档

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 页面:

  1. Settings → Secrets and variables → Actions
  2. New repository secret
  3. 名字填 OPENAI_API_KEY,值填你的 OpenAI API key
  4. 保存

如果你团队用 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 测试自动修复链路。最简单的办法:

  1. 新建一个 branch test-autofix
  2. 故意改一个文件触发类型错误(比如把一个变量删掉但保留 import)
  3. push、开 PR
  4. 等 CI 跑、看 Codex Autofix 工作流是不是自动触发
  5. 看 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:

📋 Prompt 模板

本周 Codex Autofix 共提了 X 个 PR。请帮我做一份复盘:

我会贴 PR 列表和最终状态。请:

  1. 分类统计:merge 了几个、关闭几个、还 open 几个
  2. 找规律:什么类型的修复 Codex 表现好、什么类型经常被关
  3. 基于规律,给 .codex/autofix-rules.md 改进建议
  4. 输出一份新版 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」的版本。

下一步

常见问题

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 自动修,形成「依赖自动升级 + 自动修复」的串联工作流。