Headless 模式
在 CI/CD 环境中使用 Claude Code 的 Headless 模式进行自动化任务。
基本用法
bash
# Headless 模式运行单个命令
claude --headless "分析 src 目录并生成报告"
# 输出结果到文件
claude --headless "运行测试并生成覆盖率报告" > report.txt
# 使用环境变量配置
export ANTHROPIC_API_KEY="your-api-key"
claude --headless "检查代码质量"CI/CD 集成
GitHub Actions
bash
# .github/workflows/code-review.yml
name: Code Review
on:
pull_request:
branches: [main]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install Claude Code
run: npm install -g @anthropic-ai/claude-code
- name: Run Code Review
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --headless "审查所有修改的文件,生成详细报告" > review.txt
cat review.txt
- name: Comment on PR
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.txt', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## AI Code Review\n\n${review}`
});GitLab CI
bash
# .gitlab-ci.yml
code_review:
stage: test
image: node:18
before_script:
- npm install -g @anthropic-ai/claude-code
script:
- claude --headless "审查代码并检查安全问题" > review.txt
- cat review.txt
artifacts:
paths:
- review.txt
expire_in: 1 week
only:
- merge_requestsJenkins
bash
# Jenkinsfile
pipeline {
agent any
environment {
ANTHROPIC_API_KEY = credentials('anthropic-api-key')
}
stages {
stage('Setup') {
steps {
sh 'npm install -g @anthropic-ai/claude-code'
}
}
stage('Code Review') {
steps {
sh '''
claude --headless "分析代码质量和安全问题" > review.txt
cat review.txt
'''
}
}
stage('Archive Results') {
steps {
archiveArtifacts artifacts: 'review.txt'
}
}
}
}自动化测试
bash
# 运行测试并分析结果
claude --headless "运行 npm test,分析失败的测试并提供修复建议"
# 示例输出:
测试结果分析:
通过:45 个测试
失败:3 个测试
失败的测试:
1. UserService.createUser
错误:Expected 201, received 500
原因:数据库连接失败
建议:检查数据库配置和连接池设置
2. AuthMiddleware.verify
错误:JWT verification failed
原因:使用了错误的密钥
建议:确保 JWT_SECRET 环境变量正确设置
3. OrderController.checkout
错误:Timeout after 5000ms
原因:支付网关响应超时
建议:增加超时时间或添加重试机制
修复优先级:
1. 高:数据库连接问题
2. 中:JWT 配置
3. 低:超时设置代码生成
bash
# 生成测试文件
claude --headless "为 src/services/UserService.ts 生成完整的单元测试"
# 生成文档
claude --headless "为 src/api 目录生成 API 文档"
# 生成配置文件
claude --headless "创建 Docker 配置文件,包含 Node.js 18 和 PostgreSQL"批量处理
bash
# 批量审查多个文件
claude --headless "审查以下文件:src/auth/*.ts,检查安全问题"
# 批量重构
claude --headless "将 src/components 目录下的所有类组件转换为函数组件"
# 批量添加类型
claude --headless "为 src/utils 目录下的所有 JavaScript 文件添加 TypeScript 类型"自动化报告
bash
# 生成每日代码质量报告
#!/bin/bash
DATE=$(date +%Y-%m-%d)
REPORT_FILE="reports/quality-report-$DATE.md"
claude --headless "
分析整个代码库,生成质量报告,包括:
1. 代码统计(文件数、行数)
2. 代码质量问题
3. 安全漏洞
4. 测试覆盖率
5. 性能问题
6. 改进建议
" > $REPORT_FILE
echo "报告已生成:$REPORT_FILE"
# 发送邮件通知
mail -s "每日代码质量报告 - $DATE" team@example.com < $REPORT_FILE环境变量配置
bash
# 必需的环境变量
export ANTHROPIC_API_KEY="your-api-key"
# 可选配置
export CLAUDE_MODEL="opus" # 使用 Opus 模型
export CLAUDE_MAX_TOKENS="4096" # 最大输出 tokens
export CLAUDE_TEMPERATURE="0.7" # 温度参数
export CLAUDE_TIMEOUT="300000" # 超时时间(毫秒)
# 运行
claude --headless "你的命令"错误处理
bash
# 带错误处理的脚本
#!/bin/bash
set -e # 遇到错误立即退出
# 运行 Claude Code
if claude --headless "运行代码审查" > review.txt 2>&1; then
echo "审查成功"
cat review.txt
exit 0
else
echo "审查失败"
cat review.txt
exit 1
fi并行执行
bash
# 并行审查多个模块
#!/bin/bash
# 审查认证模块
claude --headless "审查 src/auth 目录" > auth-review.txt &
# 审查 API 模块
claude --headless "审查 src/api 目录" > api-review.txt &
# 审查数据库模块
claude --headless "审查 src/database 目录" > db-review.txt &
# 等待所有任务完成
wait
# 合并报告
cat auth-review.txt api-review.txt db-review.txt > full-review.txt
echo "完整审查报告已生成:full-review.txt"定时任务
bash
# 使用 cron 定时运行
# crontab -e
# 每天凌晨 2 点运行代码审查
0 2 * * * cd /path/to/project && claude --headless "运行每日代码审查" > /path/to/reports/daily-$(date +\%Y\%m\%d).txt
# 每周一早上 8 点生成周报
0 8 * * 1 cd /path/to/project && claude --headless "生成本周代码质量周报" > /path/to/reports/weekly-$(date +\%Y\%W).txt
# 每次 git push 后运行检查
# .git/hooks/post-commit
#!/bin/bash
claude --headless "检查最新提交的代码质量" > commit-review.txtDocker 集成
bash
# Dockerfile
FROM node:18-alpine
# 安装 Claude Code
RUN npm install -g @anthropic-ai/claude-code
# 设置工作目录
WORKDIR /app
# 复制项目文件
COPY . .
# 运行审查
CMD ["claude", "--headless", "审查代码并生成报告"]bash
# 使用 Docker 运行
docker build -t code-review .
docker run -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY code-review输出格式化
bash
# JSON 格式输出
claude --headless --format json "分析代码质量" > report.json
# Markdown 格式输出
claude --headless --format markdown "生成项目文档" > README.md
# HTML 格式输出
claude --headless --format html "生成测试报告" > report.html成本控制
bash
# 设置成本限制
export CLAUDE_MAX_COST="1.00" # 最多花费 $1.00
# 使用更便宜的模型
export CLAUDE_MODEL="haiku"
# 限制输出长度
export CLAUDE_MAX_TOKENS="1000"
# 运行
claude --headless "快速代码检查"最佳实践
bash
# 1. 使用明确的提示词
claude --headless "检查 src/auth/login.ts 的安全问题,重点关注 SQL 注入和 XSS"
# 2. 分步执行复杂任务
claude --headless "第一步:分析代码结构"
claude --headless "第二步:识别性能问题"
claude --headless "第三步:生成优化建议"
# 3. 保存中间结果
claude --headless "分析代码" > step1.txt
claude --headless "基于 step1.txt 的分析,生成修复方案" > step2.txt
# 4. 使用超时保护
timeout 300 claude --headless "长时间任务"
# 5. 记录日志
claude --headless "审查代码" 2>&1 | tee review.log故障排除
bash
# 检查 API Key
echo $ANTHROPIC_API_KEY
# 测试连接
claude --headless "测试连接"
# 查看详细日志
claude --headless --verbose "运行任务"
# 调试模式
claude --headless --debug "运行任务"示例:完整 CI 流程
bash
#!/bin/bash
# ci-pipeline.sh
set -e
echo "开始 CI 流程..."
# 1. 代码检查
echo "1. 运行代码检查..."
claude --headless "运行 ESLint 和 TypeScript 检查" > lint-report.txt
# 2. 安全扫描
echo "2. 运行安全扫描..."
claude --headless "扫描安全漏洞和依赖问题" > security-report.txt
# 3. 测试
echo "3. 运行测试..."
claude --headless "运行所有测试并分析结果" > test-report.txt
# 4. 性能分析
echo "4. 运行性能分析..."
claude --headless "分析性能瓶颈" > performance-report.txt
# 5. 生成总结报告
echo "5. 生成总结报告..."
claude --headless "
基于以下报告生成总结:
- lint-report.txt
- security-report.txt
- test-report.txt
- performance-report.txt
包括:
1. 关键问题汇总
2. 修复优先级
3. 改进建议
" > summary-report.txt
echo "CI 流程完成!"
echo "查看 summary-report.txt 获取详细信息"常用命令
bash
claude --headless "命令" # 基本用法
claude --headless --model opus "命令" # 指定模型
claude --headless --format json "命令" # 指定输出格式
claude --headless --verbose "命令" # 详细日志