为什么要让 Codex 跑在 CI 里?
传统 CI 做的是"检查"——跑 Lint、测类型、跑单元测试。但这些只是静态验证,无法发现逻辑错误、设计缺陷或代码质量下降。
Codex 的核心价值在于:它能理解代码意图。把它接入 CI,可以做这些额外的事:
- 自动修复 Lint/格式错误
- PR 描述自动生成与质量检查
- Issue 自动分析与初步修复
- 批量重构后的回归测试
下面从一个最小可行示例开始,逐步扩展到完整工作流。
一、最小可行示例:Codex 自动修复 Issue
这是最简单的接入方式——当新 Issue 出现时,Codex 自动读取仓库并尝试生成修复方案。
.github/workflows/codex-fix.yml
name: Codex Auto Fix
on:
issues:
types: [opened]
jobs:
codex-fix:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Codex
run: npm install -g @openai/codex
- name: Run Codex
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec \
--sandbox workspace-write \
--ask-for-approval never \
"请修复 issue #${{ github.event.issue.number }} 中描述的问题。先分析代码,再给出修改方案,不要直接修改生产代码。"
关键参数说明:
- --sandbox workspace-write:允许在工作区内读写文件
- --ask-for-approval never:非交互模式,不请求人工审批
- env.OPENAI_API_KEY:通过 GitHub Secrets 注入,不硬编码
二、进阶:PR 自动化代码审查
在 Pull Request 创建或更新时,让 Codex 分析变更并提供评审意见。
.github/workflows/codex-review.yml
name: Codex PR Review
on:
pull_request:
types: [opened, synchronize]
jobs:
codex-review:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整历史,便于分析
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Codex
run: npm install -g @openai/codex
- name: Run Codex Review
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
# 获取 PR diff
curl -s -H "Authorization: token $GITHUB_TOKEN" \
"${{ github.event.pull_request.diff_url }}" > pr-diff.patch
# 让 Codex 分析 diff 并生成评审报告
codex exec \
--sandbox read-only \
--ask-for-approval never \
-o /tmp/codex-report.md \
"请分析 pr-diff.patch,输出评审报告,包括:
1. 本次变更的核心改动点
2. 潜在风险或遗留问题
3. 代码风格是否符合项目规范
4. 建议改进点(如有)"
- name: Post Review Comment
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const report = fs.readFileSync('/tmp/codex-report.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## 🤖 Codex Code Review\n\n${report}`
})
关键点:
- 使用 read-only 沙箱,因为只分析不改写
- 输出到 /tmp/codex-report.md,再由 GitHub Script 发布评论
- fetch-depth: 0 确保能看到完整提交历史
三、批量任务:统一修复多个文件的格式问题
适合场景:重构后批量修复 Lint 错误、统一代码风格、添加缺失注释。
.github/workflows/codex-batch-fix.yml
name: Codex Batch Fix
on:
workflow_dispatch: # 手动触发,避免频繁运行
jobs:
batch-fix:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install Codex
run: npm install -g @openai/codex
- name: Run Batch Fix
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec \
--sandbox workspace-write \
--ask-for-approval never \
"扫描 src/ 目录下所有 .ts 文件,修复以下问题:
1. 移除未使用的 import
2. 将 console.log 替换为项目 logger
3. 为所有 public 方法补充 JSDoc 注释
每修复一个文件后输出修改摘要。"
- name: Check Changes
run: git diff --stat
四、JSON 输出与程序化集成
对于需要解析结果的场景(如生成报告、写入数据库),使用 --json 参数:
- name: Run Codex with JSON
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
codex exec \
--sandbox workspace-write \
--ask-for-approval never \
--json \
"分析 package.json 中的依赖,找出可更新版本" \
> codex-analysis.json
配合 Python 脚本处理结果:
import json, subprocess
result = subprocess.run(
["codex", "exec", "--json", "你的任务"],
capture_output=True, text=True
)
data = json.loads(result.stdout)
print(data.get("response", "")[:500]) # 截取摘要
五、安全与成本注意事项
1. 永远不要硬编码 API Key
❌ 错误做法:
env:
OPENAI_API_KEY: "sk-abc123..." # 提交到仓库!
✅ 正确做法:通过 GitHub Secrets 注入:
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
2. 控制运行频率
Codex 按 token 计费,频繁运行会烧钱。建议:
- 使用 workflow_dispatch 手动触发批量任务
- Issue/PR 触发时,只让 Codex 做轻量分析而非全面改写
- 设置合理的超时:timeout-minutes: 10
3. 沙箱策略选择
| 任务类型 | 推荐沙箱 | 理由 |
|---|---|---|
| 代码分析/审查 | read-only | 只读,不产生副作用 |
| 自动修复 | workspace-write | 限工作区,可追溯 |
| 批量重构 | workspace-write + 分支 | 留痕便于回滚 |
4. 永远走 PR 评审
即使 Codex 生成了修复代码,也不要让它直接 push 到主分支。正确做法: 1. Codex 生成修改 → 输出到临时分支 2. 创建 PR → 人工 Review 3. 合并 → 上线
六、完整示例仓库结构
your-repo/
├── .github/
│ └── workflows/
│ ├── codex-fix.yml # Issue 自动修复
│ ├── codex-review.yml # PR 评审
│ └── codex-batch-fix.yml # 批量修复
├── .codex/
│ └── config.toml # 项目级 Codex 配置
├── src/
└── AGENTS.md # Codex 项目指令
.codex/config.toml 推荐配置:
[sandbox]
sandbox_mode = "workspace-write"
approval_policy = "on-request"
[model]
model = "gpt-5.2-codex"
model_reasoning_effort = "medium"
七、从手动到自动的演进路线
- 第一步:先手动运行
codex exec,验证效果 - 第二步:接入 Issue 自动修复,观察 Codex 的输出质量
- 第三步:加入 PR 评审,作为人工 Review 的补充
- 第四步:配置批量任务,用
workflow_dispatch控制节奏 - 第五步:根据实际成本和收益,决定是否扩大使用范围
记住:Codex 是助手,不是决策者。让它在受控环境中工作,你保留最终审批权。
来源: 本文根据社区 Codex CI/CD 集成实战内容整理改写,核心示例参考 OpenAI Codex 官方文档及多位开发者的 GitHub Actions 实践经验。
资料最后核对日期:2026-09-16 · 内容整理自 CodexGuide 社区公开教程