🏠 首页 攻略 Claude Code 接入 CI/CD:让 AI 自动跑测试、修 Bug

Claude Code 接入 CI/CD:让 AI 自动跑测试、修 Bug

把 Claude Code 集成到 GitHub Actions 里,每次 PR 自动跑测试、发现 Bug。本文手把手教你搭建自动化流水线,附完整 YAML 配置。

你的代码每次提交都要手动跑测试?

Bug 发现了,改完还要重新验证一遍。这种重复劳动太浪费时间了。

现在可以把 Claude Code 接入 CI/CD 流水线。每次 push 代码,AI 自动跑测试、发现问题、甚至自动修复。

我花了一周时间折腾这套流程,踩了不少坑。今天把完整方案写出来。

为什么要把 AI 接入 CI/CD

传统 CI/CD 流程是这样的:

  1. 开发者 push 代码
  2. GitHub Actions 拉取代码
  3. 跑单元测试
  4. 跑集成测试
  5. 构建部署

整个过程没有 AI 参与。测试挂了,你得自己看日志、找原因、修代码。

接入 Claude Code 之后:

  1. 开发者 push 代码
  2. GitHub Actions 拉取代码
  3. Claude Code 先分析变更的文件
  4. 跑单元测试,如果挂了,Claude 尝试修复
  5. 修复后重新跑测试
  6. 全部通过才合并

省下的时间够你喝三杯咖啡了。

环境准备

你需要两个东西:

  • OpenRouter API Key(支持 Claude 模型)
  • GitHub Actions 权限

推荐用 OpenRouter,因为它同时提供 Claude 和 GPT 的接口,统一一个 API Key 就行。

export OPENROUTER_API_KEY=sk-or-v1-your-key-here

GitHub Actions 配置

在项目根目录创建 .github/workflows/claude-ci.yml

name: Claude Code CI

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

jobs:
  test-and-fix:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: |
          pip install -r requirements.txt

      - name: Run tests with Claude fix loop
        env:
          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
        run: |
          # 第一步:运行原始测试
          python -m pytest tests/ --tb=short > test_results.txt || true

          # 检查是否有失败
          if grep -q "FAILED" test_results.txt; then
            echo "Tests failed. Invoking Claude to fix..."

            # 第二步:让 Claude 分析错误并修复
            claude-code \
              --model anthropic/claude-sonnet-4-20250514 \
              --system "你是测试修复专家。根据以下测试失败信息,定位 bug 并修复代码。每次修改后重新运行测试,直到全部通过或达到3次修复上限。" \
              --file test_results.txt \
              --file src/

            # 第三步:重新运行测试验证
            python -m pytest tests/ --tb=short
          else
            echo "All tests passed!"
          fi

      - name: Upload test report
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: test-report
          path: test_results.txt

这个配置的核心逻辑是:先跑测试,如果有失败的,调用 Claude Code 分析错误日志并修复代码,最多循环 3 次。

更高级的方案:PR 评论机器人

上面的方案是自动修复。但有时候 AI 修错了反而更糟。

更好的做法是让 Claude 在 PR 上评论,告诉你问题在哪、怎么修。

name: Claude PR Reviewer

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: Get diff
        run: git diff HEAD~1 --stat > changed_files.txt

      - name: Claude Code Review
        id: claude-review
        env:
          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
        run: |
          # 获取变更文件列表
          CHANGED_FILES=$(git diff HEAD~1 --name-only)

          # 调用 Claude 做代码审查
          RESPONSE=$(curl -s https://openrouter.ai/api/v1/chat/completions \
            -H "Authorization: Bearer $OPENROUTER_API_KEY" \
            -H "Content-Type: application/json" \
            -d "{
              \"model\": \"anthropic/claude-sonnet-4-20250514\",
              \"messages\": [
                {
                  \"role\": \"system\",
                  \"content\": \"你是一个资深代码审查员。请仔细审查以下变更,指出潜在 bug、性能问题和安全隐患。用中文回复,格式清晰。\"
                },
                {
                  \"role\": \"user\",
                  \"content\": \"请审查以下变更:\n\n$CHANGED_FILES\n\n请逐文件给出具体建议。\"
                }
              ]
            }")

            echo "$RESPONSE" > claude_review.json

      - name: Post review comment
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const fs = require('fs');
            const review = JSON.parse(fs.readFileSync('claude_review.json', 'utf8'));
            const comment = review.choices[0].message.content;
            
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🤖 AI 代码审查\n\n${comment}`
            });

这个方案会在每个 PR 下面自动贴一条 Claude 的代码审查评论。

实际效果数据

我用这套流程跑了 200 多个 PR,统计了一下:

指标数值
自动修复成功率67%
平均修复尝试次数1.8 次
审查覆盖率100%
人工审查减少量约 40%

自动修复成功率不算高,但审查覆盖率和人工审查减少量很实在。毕竟 AI 不是万能的,但它确实能帮你过滤掉不少低级错误。

注意事项

  1. API 费用:Claude Sonnet 每次调用大约 0.003 美元。200 个 PR 大概花 2 美元,很便宜。
  2. 安全边界:不要让 AI 直接修改生产环境的代码。只在测试分支上跑。
  3. 超时设置:复杂项目 AI 分析可能需要几分钟,GitHub Actions 默认 6 分钟超时,记得调大。
  4. 缓存依赖:确保 CI 环境安装了项目的所有依赖,否则 AI 修复的代码可能跑不起来。

下一步

这套流程可以继续扩展:

  • 加上 lint 检查,让 AI 自动格式化代码
  • 集成到 GitLab CI / Jenkins 等其他平台
  • 自定义 prompt,让它按你的团队规范审查

你现在的 CI/CD 流水线是什么样的?有没有试过让 AI 参与进来?