OpenAICodex代码审查 codex-review

使用 OpenAI Codex CLI 进行代码审查,专注于检测代码中的错误、安全漏洞和质量问题,支持自动化集成和 GitHub 原生操作。

DevOps 0 次安装 0 次浏览 更新于 3/5/2026

OpenAI Codex 代码审查技能

使用:base.md + code-review.md

使用 OpenAI 的 Codex CLI 进行专业的代码审查,使用 GPT-5.2-Codex - 专门针对检测错误、安全漏洞和代码质量问题进行训练。

来源: Codex CLI | GitHub | 代码审查 Cookbook


为什么使用 Codex 进行代码审查?

特性 好处
GPT-5.2-Codex 专门针对代码审查的训练
88% 检测率 错误、安全漏洞、风格问题(LiveCodeBench)
结构化输出 JSON 模式,用于一致的发现
GitHub 原生 PR评论中的 @codex review
无头模式 CI/CD自动化,无需TUI

安装

先决条件

# 检查 Node.js 版本(需要22+)
node --version

# 如果需要,安装 Node.js 22
# macOS
brew install node@22

# 或者通过 nvm
nvm install 22
nvm use 22

安装 Codex CLI

# 通过 npm(推荐)
npm install -g @openai/codex

# 通过 Homebrew(macOS)
brew install --cask codex

# 验证安装
codex --version

认证

选项 1:ChatGPT 订阅(Plus, Pro, Team, Edu, Enterprise)

codex
# 按照提示使用 ChatGPT 账户登录

选项 2:OpenAI API 密钥

# 设置环境变量
export OPENAI_API_KEY=sk-proj-...

# 或者添加到 shell 配置文件
echo 'export OPENAI_API_KEY=sk-proj-...' >> ~/.zshrc

# 运行 Codex
codex

Shell 补全(可选)

# Bash
codex completion bash >> ~/.bashrc

# Zsh
codex completion zsh >> ~/.zshrc

# Fish
codex completion fish > ~/.config/fish/completions/codex.fish

交互式代码审查

启动审查模式

# 启动 Codex
codex

# 在 TUI 中输入:
/review

审查预设

预设 使用场景
与基础分支对比审查 在打开 PR 前 - 与上游的差异
审查未提交的更改 在提交前 - 已暂存 + 未暂存 + 未跟踪
审查一次提交 分析历史中特定的 SHA
自定义指令 例如,“关注安全漏洞”

示例会话

$ codex
> /review

选择审查类型:
❯ 与基础分支对比审查
  审查未提交的更改
  审查一次提交
  自定义审查指令

选择基础分支:main

审查更改中...

┌─────────────────────────────────────────────────────────────┐
│ 代码审查发现                                        │
├─────────────────────────────────────────────────────────────┤
│ 🔴 严重:SQL 注入漏洞                    │
│    文件:src/api/users.ts:45                                │
│    问题:用户输入直接插值在查询中         │
│    修复:使用参数化查询                           │
├─────────────────────────────────────────────────────────────┤
│ 🟠 高:缺少认证检查                       │
│    文件:src/api/admin.ts:23                                │
│    问题:无需认证即可访问管理端点            │
│    修复:添加 requireAuth 中间件                          │
├─────────────────────────────────────────────────────────────┤
│ 🟡 中:低效的数据库查询                       │
│    文件:src/services/orders.ts:89                          │
│    问题:循环中的 N+1 查询模式                         │
│    修复:使用批量查询或 JOIN                             │
└─────────────────────────────────────────────────────────────┘

无头模式(自动化)

基本用法

# 简单审查
codex exec "审查代码中的错误和安全问题"

# 带 JSON 输出的审查
codex exec --json "审查未提交的更改" > review.json

# 将最终消息保存到文件
codex exec --output-last-message review.txt "审查与 main 的差异"

完整自动化(CI/CD)

# 完整自动模式(仅在隔离的运行器中使用!)
codex exec \
  --full-auto \
  --json \
  --output-last-message findings.txt \
  --sandbox read-only \
  -m gpt-5.2-codex \
  "审查此代码中的错误、安全问题和性能问题"

结构化输出与模式

# 定义输出模式
cat > review-schema.json << 'EOF'
{
  "type": "object",
  "properties": {
    "findings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": { "enum": ["critical", "high", "medium", "low"] },
          "title": { "type": "string" },
          "file": { "type": "string" },
          "line": { "type": "integer" },
          "description": { "type": "string" },
          "suggestion": { "type": "string" }
        },
        "required": ["severity", "title", "file", "description"]
      }
    },
    "summary": { "type": "string" },
    "approved": { "type": "boolean" }
  },
  "required": ["findings", "summary", "approved"]
}
EOF

# 使用模式验证运行
codex exec \
  --output-schema review-schema.json \
  --output-last-message review.json \
  "审查已暂存的更改并输出发现"

GitHub 集成

选项 1:PR评论触发

在任何拉取请求中,添加评论:

@codex review

Codex 将以标准的 GitHub 代码审查回应。

选项 2:GitHub Action

# .github/workflows/codex-review.yml
name: Codex 代码审查

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Codex 审查
        uses: openai/codex-action@main
        with:
          openai_api_key: ${{ secrets.OPENAI_API_KEY }}
          model: gpt-5.2-codex
          safety_strategy: drop-sudo

选项 3:CI中手动无头

# .github/workflows/codex-review.yml
name: Codex 代码审查

on:
  pull_request:

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: 安装 Codex CLI
        run: npm install -g @openai/codex

      - name: 运行审查
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: |
          # 获取差异
          git diff origin/${{ github.base_ref }}...HEAD > diff.txt

          # 运行 Codex 审查
          codex exec \
            --full-auto \
            --sandbox read-only \
            --output-last-message review.md \
            "审查这个 git diff 中的错误、安全问题和代码质量:$(cat diff.txt)"

      - name: 发布审查评论
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review.md', 'utf8');
            github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `## 🤖 Codex 代码审查

${review}`
            });

GitLab CI/CD

# .gitlab-ci.yml
codex-review:
  image: node:22
  stage: review
  script:
    - npm install -g @openai/codex
    - |
      codex exec \
        --full-auto \
        --sandbox read-only \
        --output-last-message review.md \
        "审查这个合并请求的更改,寻找错误和安全问题"
    - cat review.md
  artifacts:
    paths:
      - review.md
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

Jenkins Pipeline

pipeline {
    agent any

    environment {
        OPENAI_API_KEY = credentials('openai-api-key')
    }

    stages {
        stage('Install Codex') {
            steps {
                sh 'npm install -g @openai/codex'
            }
        }

        stage('Code Review') {
            steps {
                sh '''
                    codex exec \
                      --full-auto \
                      --sandbox read-only \
                      --output-last-message review.md \
                      "审查代码更改中的错误和安全问题"
                '''
            }
        }

        stage('Publish Results') {
            steps {
                archiveArtifacts artifacts: 'review.md'
                script {
                    def review = readFile('review.md')
                    echo "代码审查结果:
${review}"
                }
            }
        }
    }
}

配置

配置文件

# ~/.codex/config.toml

[model]
default = "gpt-5.2-codex"  # 最适合代码审查

[sandbox]
default = "read-only"  # 安全审查

[review]
# 应用于所有审查的自定义审查指令
instructions = """
关注:
1. 安全漏洞(OWASP Top 10)
2. 性能问题(N+1 查询,内存泄漏)
3. 错误处理漏洞
4. 类型安全问题
"""

每个项目的配置

# .codex/config.toml (在项目根目录)

[review]
instructions = """
这是一个 Python FastAPI 项目。关注:
- 异步/等待正确性
- Pydantic 模型验证
- 通过 SQLAlchemy 的 SQL 注入
- 认证/授权漏洞
"""

CLI 快速参考

# 交互式
codex                          # 启动 TUI
/review                        # 打开审查预设

# 无头
codex exec "prompt"            # 非交互式执行
codex exec --json "prompt"     # JSON 输出
codex exec --full-auto "prompt"  # 无需批准提示

# 关键标志
--output-last-message FILE     # 将响应保存到文件
--output-schema FILE           # 根据 JSON 模式验证
--sandbox read-only            # 限制文件访问
-m gpt-5.2-codex              # 使用最佳审查模型
--json                         # 机器可读输出

# 恢复
codex exec resume SESSION_ID   # 继续之前的会话

Claude 与 Codex 审查比较

方面 Claude(内置) Codex CLI
设置 无(已经在 Claude Code 中) 安装 CLI + 认证
模型 Claude GPT-5.2-Codex(专门)
上下文 完整的对话上下文 每次审查新上下文
集成 原生 GitHub, GitLab, Jenkins
输出 Markdown JSON 模式支持
最适合 快速审查,流程中 CI/CD, 关键 PRs

安全考虑

CI/CD 安全

# 总是在 CI/CD 中使用这些标志:
--sandbox read-only           # 防止文件修改
--safety-strategy drop-sudo   # 撤销提升的权限

API 密钥保护

# GitHub Actions - 使用 secrets
env:
  OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

# 永远不要硬编码密钥
# 永远不要在日志中显示密钥

公共仓库

对于公共仓库,使用 drop-sudo 安全策略,以防止 Codex 在执行期间读取自己的 API 密钥。


故障排除

问题 解决方案
codex: command not found 运行 npm install -g @openai/codex
Node.js 版本错误 升级到 Node.js 22+
认证失败 重新运行 codex 并再次登录
API 密钥无效 检查 OPENAI_API_KEY 环境变量
CI 中的 超时 添加 --timeout 300 标志
频率限制 减少频率或升级计划

反模式

  • 随意使用 --dangerously-bypass-approvals-and-sandbox - 仅在隔离的 CI 运行器中
  • 在日志中暴露 API 密钥 - 使用秘密管理
  • 在 CI 中跳过沙箱 - 总是使用 --sandbox read-only
  • 忽略发现 - 审查并解决或记录例外
  • 每次提交都运行 - 仅在 PR 上使用以节省成本