你的代码每次提交都要手动跑测试?
Bug 发现了,改完还要重新验证一遍。这种重复劳动太浪费时间了。
现在可以把 Claude Code 接入 CI/CD 流水线。每次 push 代码,AI 自动跑测试、发现问题、甚至自动修复。
我花了一周时间折腾这套流程,踩了不少坑。今天把完整方案写出来。
为什么要把 AI 接入 CI/CD
传统 CI/CD 流程是这样的:
- 开发者 push 代码
- GitHub Actions 拉取代码
- 跑单元测试
- 跑集成测试
- 构建部署
整个过程没有 AI 参与。测试挂了,你得自己看日志、找原因、修代码。
接入 Claude Code 之后:
- 开发者 push 代码
- GitHub Actions 拉取代码
- Claude Code 先分析变更的文件
- 跑单元测试,如果挂了,Claude 尝试修复
- 修复后重新跑测试
- 全部通过才合并
省下的时间够你喝三杯咖啡了。
环境准备
你需要两个东西:
- 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 不是万能的,但它确实能帮你过滤掉不少低级错误。
注意事项
- API 费用:Claude Sonnet 每次调用大约 0.003 美元。200 个 PR 大概花 2 美元,很便宜。
- 安全边界:不要让 AI 直接修改生产环境的代码。只在测试分支上跑。
- 超时设置:复杂项目 AI 分析可能需要几分钟,GitHub Actions 默认 6 分钟超时,记得调大。
- 缓存依赖:确保 CI 环境安装了项目的所有依赖,否则 AI 修复的代码可能跑不起来。
下一步
这套流程可以继续扩展:
- 加上 lint 检查,让 AI 自动格式化代码
- 集成到 GitLab CI / Jenkins 等其他平台
- 自定义 prompt,让它按你的团队规范审查
你现在的 CI/CD 流水线是什么样的?有没有试过让 AI 参与进来?