Codex CLI 非交互模式:把 AI 接入你的 CI/CD 流水线

Codex CLI 非交互模式:把 AI 接入你的 CI/CD 流水线

本系列文章基于 Codex CLI 源码深度分析,本文聚焦 codex exec 命令,教你如何将 AI 编程能力接入自动化流水线。
全网唯一从 Rust 源码层面拆解 Codex CLI 的系列

零、阅读收益

读完本文你将理解:

  • codex exec 的完整用法和参数体系
  • 如何将 AI 编程能力接入 GitHub Actions / GitLab CI
  • 非交互模式的输入输出格式(JSON/文本)
  • 源码中 codex-rs/exec/ 的实现原理

一、exec 命令概览

codex exec 是 Codex CLI 的非交互模式,适合脚本化和自动化场景:

bash 复制代码
# 基本用法
codex exec "修复 src/main.rs 中的所有编译错误"

# 简写
codex e "添加单元测试"

核心参数

参数 说明
PROMPT 任务描述(位置参数)
--json 以 JSON 格式输出结果
--model 指定模型
--approval-policy 覆盖审批策略
--no-sandbox 禁用沙箱(谨慎使用)
--cwd 指定工作目录
--max-turns 最大 Turn 数
--timeout 超时时间(秒)

源码结构

rust 复制代码
// 源码位置:codex-rs/exec/src/

pub struct Cli {
    /// 任务描述
    #[arg(value_name = "PROMPT")]
    pub prompt: Option<String>,

    /// 从 stdin 读取 prompt
    #[arg(long = "stdin", default_value_t = false)]
    pub read_prompt_from_stdin: bool,

    /// JSON 格式输出
    #[arg(long = "json", default_value_t = false)]
    pub json_output: bool,

    /// 最大 Turn 数
    #[arg(long = "max-turns")]
    pub max_turns: Option<usize>,

    /// 超时时间
    #[arg(long = "timeout")]
    pub timeout_secs: Option<u64>,
}

二、实战场景

2.1 自动修复编译错误

bash 复制代码
# 将编译错误通过管道传给 Codex
cargo build 2>&1 | codex exec --stdin "修复这些编译错误"

# 或指定文件
codex exec "修复 src/main.rs 中的编译错误,不要改变功能"

2.2 自动生成单元测试

bash 复制代码
codex exec "为 src/lib.rs 中的所有公开函数生成单元测试,写入 tests/ 目录"

2.3 代码格式化与 Lint 修复

bash 复制代码
codex exec "检查 src/ 目录下的所有 Rust 文件,修复 clippy 警告"

2.4 自动生成文档

bash 复制代码
codex exec "为 src/ 目录下所有公开 API 添加 Rust doc 注释"

2.5 依赖更新

bash 复制代码
codex exec "检查 Cargo.toml 中的依赖版本,更新到最新兼容版本,确保编译通过"

三、GitHub Actions 集成

3.1 自动修复 CI 失败

yaml 复制代码
# .github/workflows/ai-fix.yml
name: AI Auto Fix

on:
  workflow_run:
    workflows: ["CI"]
    types: [completed]

jobs:
  ai-fix:
    if: ${{ github.event.workflow_run.conclusion == 'failure' }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Codex CLI
        run: |
          curl -fsSL https://chatgpt.com/codex/install.sh | sh
          echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: Get CI Error Log
        run: |
          # 获取 CI 失败日志
          gh run view ${{ github.event.workflow_run.id }} --log > ci-error.log

      - name: AI Fix
        env:
          CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
        run: |
          cat ci-error.log | codex exec --stdin \
            --json \
            --max-turns 5 \
            --timeout 300 \
            "分析 CI 失败原因并修复代码。只修改源文件,不要修改 CI 配置。"

      - name: Create PR
        if: success()
        run: |
          git config user.name "codex-bot"
          git config user.email "bot@example.com"
          git checkout -b ai-fix-${{ github.run_id }}
          git add .
          git commit -m "🤖 AI auto-fix for CI failure"
          git push origin ai-fix-${{ github.run_id }}
          gh pr create --title "🤖 AI Auto Fix" --body "AI 自动修复 CI 失败"

3.2 自动 Code Review

yaml 复制代码
# .github/workflows/ai-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

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

      - name: Install Codex CLI
        run: |
          curl -fsSL https://chatgpt.com/codex/install.sh | sh
          echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: AI Review
        env:
          CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
        run: |
          codex review \
            --base ${{ github.event.pull_request.base.sha }} \
            --json \
            --output review.json

      - name: Post Review
        run: |
          # 解析 review.json 并作为 PR comment 发布
          gh pr comment ${{ github.event.pull_request.number }} \
            --body "$(cat review.json | jq -r '.summary')"

3.3 自动生成 Release Notes

yaml 复制代码
# .github/workflows/ai-release-notes.yml
name: AI Release Notes

on:
  push:
    tags:
      - 'v*'

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

      - name: Install Codex CLI
        run: |
          curl -fsSL https://chatgpt.com/codex/install.sh | sh
          echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: Generate Release Notes
        env:
          CODEX_API_KEY: ${{ secrets.CODEX_API_KEY }}
        run: |
          # 获取 git log
          PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
          git log ${PREV_TAG}..HEAD --oneline > changes.txt

          cat changes.txt | codex exec --stdin \
            --json \
            "根据这些 git commits 生成 Release Notes,按 Feature/BugFix/Breaking 分类"

      - name: Create Release
        run: |
          gh release create ${{ github.ref_name }} \
            --title "${{ github.ref_name }}" \
            --notes "$(cat release-notes.md)"

四、GitLab CI 集成

yaml 复制代码
# .gitlab-ci.yml
ai-auto-fix:
  stage: fix
  when: on_failure
  image: rust:latest
  before_script:
    - curl -fsSL https://chatgpt.com/codex/install.sh | sh
    - export PATH="$HOME/.local/bin:$PATH"
  script:
    - |
      # 收集错误日志
      cat build.log 2>/dev/null || cargo build 2>&1 | tee build.log
      # AI 修复
      cat build.log | codex exec --stdin \
        --json \
        --max-turns 5 \
        "修复编译错误"
  artifacts:
    paths:
      - "*.rs"
    when: on_success

五、JSON 输出格式

bash 复制代码
codex exec --json "列出所有 TODO 注释"

输出示例:

json 复制代码
{
  "success": true,
  "result": {
    "summary": "找到 5 个 TODO 注释",
    "files_modified": [],
    "output": "1. src/main.rs:45 - TODO: handle error\n2. src/lib.rs:120 - TODO: add tests\n...",
    "token_usage": {
      "total": 1234,
      "prompt": 800,
      "completion": 434
    }
  },
  "error": null
}

六、Shell 脚本集成

bash 复制代码
#!/bin/bash
# auto-fix.sh - 自动修复脚本

set -e

PROJECT_DIR="$1"
ERROR_LOG="$2"

cd "$PROJECT_DIR"

# 检查 Codex CLI 是否安装
if ! command -v codex &> /dev/null; then
    echo "Installing Codex CLI..."
    curl -fsSL https://chatgpt.com/codex/install.sh | sh
    export PATH="$HOME/.local/bin:$PATH"
fi

# 检查认证
if ! codex login-status &> /dev/null; then
    echo "Please login first: codex login"
    exit 1
fi

# 执行 AI 修复
echo "Analyzing errors and fixing..."
codex exec --stdin \
    --json \
    --max-turns 5 \
    --timeout 300 \
    "修复以下错误,只修改源文件,不要引入新的问题" < "$ERROR_LOG"

# 检查修复结果
if cargo build 2>&1 | grep -q "error"; then
    echo "Some errors remain, manual review needed"
    exit 1
else
    echo "All errors fixed!"
fi

七、安全注意事项

在 CI/CD 中使用 Codex exec 时:

toml 复制代码
# CI 环境专用配置
[approvals]
approval_policy = "never"  # CI 中不需要交互审批

[sandbox]
linux = "landlock"  # 始终启用沙箱

[permissions]
permission_profile = "workspace"  # 限制在项目目录
allow = [
    "./src",
    "./tests",
    "./Cargo.toml",
    "/tmp",
]
deny = [
    "./secrets",
    "./.env",
    "./.git/config",
]

[network]
# CI 环境不需要网络访问
[[network.domain_permissions]]
host = "crates.io"
action = "allow"

八、总结

codex exec 让 Codex CLI 从交互式工具变成了可编程的 AI 编程能力

  1. 管道输入command 2>&1 | codex exec --stdin 将任何输出传给 AI
  2. JSON 输出--json 参数支持程序化解析
  3. CI/CD 原生:通过 GitHub Actions / GitLab CI 集成,实现自动化
  4. 安全可控:沙箱 + 权限配置确保 CI 环境安全

讨论:你会在 CI/CD 中使用 AI 来自动修复错误吗?你觉得最大的风险是什么?欢迎评论。

相关推荐
智慧物业老杨2 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
7177775 小时前
中小团队 DevOps 平台选哪家:2026 年主流平台对比与 Gitee 本土化方案解析
人工智能·gitee
武子康5 小时前
小智断网后还能做什么?沿一次唤醒看清设备与服务端的分工
人工智能·llm·agent
西安栈上月明软件科技5 小时前
从 Linux 0.01 到 AI 开源:星图邻的开源实践
人工智能·自然语言处理·架构·开源·fastapi
麻雀飞吧5 小时前
先判断工具用来学习、开发还是执行
人工智能·python
甲维斯5 小时前
ZCode:快来领“免费”3亿tokens和“Git打包服务”
人工智能
揽秀亭长5 小时前
视频转文字有哪些方法?在线AI、剪辑软件、本地对比
人工智能·音视频
RoboWizard6 小时前
三星和金士顿内存条哪个更适合游戏超频
大数据·人工智能
深圳市恒星物联科技有限公司6 小时前
轻量MCU设备通过OpenHarmony兼容性测评的全流程关键要点与实战踩坑经验
大数据·人工智能·物联网·鸿蒙
AI闲人7 小时前
企业 AI 最大的问题,不是数据不足,而是数据没有业务语义
人工智能·数字化·企业ai落地