实战

Codex + GitHub Actions:把 AI 编码智能体接入 CI/CD 流水线

2026/9/164 分钟阅读

为什么要让 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"

七、从手动到自动的演进路线

  1. 第一步:先手动运行 codex exec,验证效果
  2. 第二步:接入 Issue 自动修复,观察 Codex 的输出质量
  3. 第三步:加入 PR 评审,作为人工 Review 的补充
  4. 第四步:配置批量任务,用 workflow_dispatch 控制节奏
  5. 第五步:根据实际成本和收益,决定是否扩大使用范围

记住:Codex 是助手,不是决策者。让它在受控环境中工作,你保留最终审批权。


来源: 本文根据社区 Codex CI/CD 集成实战内容整理改写,核心示例参考 OpenAI Codex 官方文档及多位开发者的 GitHub Actions 实践经验。

资料最后核对日期:2026-09-16 · 内容整理自 CodexGuide 社区公开教程