CI/CD 集成:自动化 AI 辅助工作流
将 CCJK 集成到 CI/CD 流水线中,实现自动化代码审查、测试生成和文档更新。
C
CCJK 团队2025年1月3日
14 分钟阅读
895 次阅读
CI/CD 集成:自动化 AI 辅助工作流
将 AI 辅助集成到 CI/CD 流水线中可以解锁强大的自动化能力。从自动化代码审查到智能测试生成,CCJK 可以增强开发工作流的每个阶段。
概述
可以自动化什么?
| 阶段 | AI 能力 |
|---|---|
| 预提交 | 代码格式化、lint 建议 |
| Pull Request | 自动化代码审查、安全扫描 |
| 构建 | 文档生成 |
| 测试 | 测试覆盖率分析、测试生成 |
| 部署 | 发布说明、变更日志生成 |
GitHub Actions 集成
基础设置
创建工作流文件:
hljs yaml# .github/workflows/ai-review.yml
name: AI 代码审查
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 设置 Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: 安装 CCJK
run: npm install -g ccjk
- name: 运行 AI 审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ccjk review --ci --output github-pr
高级审查工作流
hljs yaml# .github/workflows/comprehensive-review.yml
name: 全面 AI 审查
on:
pull_request:
types: [opened, synchronize, ready_for_review]
jobs:
code-review:
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 设置
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm install -g ccjk
- name: 代码质量审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus quality \
--severity-threshold minor \
--output review-quality.md
- name: 安全审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus security \
--severity-threshold critical \
--output review-security.md
- name: 性能审查
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus performance \
--output review-performance.md
- name: 发布审查评论
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const reviews = [
'review-quality.md',
'review-security.md',
'review-performance.md'
];
let body = '## AI 代码审查摘要\n\n';
for (const file of reviews) {
if (fs.existsSync(file)) {
body += fs.readFileSync(file, 'utf8') + '\n\n';
}
}
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: body
});
自动化测试生成
新代码测试
hljs yaml# .github/workflows/test-generation.yml
name: AI 测试生成
on:
pull_request:
paths:
- 'src/**/*.ts'
- 'src/**/*.tsx'
jobs:
generate-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 设置
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm install -g ccjk
- name: 识别更改的文件
id: changed
run: |
FILES=$(git diff --name-only origin/main...HEAD | grep -E '\.(ts|tsx)$' | grep -v '\.test\.' | tr '\n' ' ')
echo "files=$FILES" >> $GITHUB_OUTPUT
- name: 生成测试
if: steps.changed.outputs.files != ''
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
for file in ${{ steps.changed.outputs.files }}; do
ccjk test generate "$file" --output "${file%.ts}.test.ts"
done
- name: 运行生成的测试
run: npm test -- --passWithNoTests
- name: 创建带测试的 PR
uses: peter-evans/create-pull-request@v5
with:
title: "test: 添加 AI 生成的测试"
body: "为新代码自动生成测试"
branch: ai-tests-${{ github.event.pull_request.number }}
文档自动化
自动生成 API 文档
hljs yaml# .github/workflows/docs-generation.yml
name: 文档生成
on:
push:
branches: [main]
paths:
- 'src/api/**'
jobs:
generate-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 设置
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm install -g ccjk
- name: 生成 API 文档
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk docs generate \
--input src/api/ \
--output docs/api/ \
--format markdown
- name: 生成 OpenAPI 规范
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk docs openapi \
--input src/api/ \
--output docs/openapi.yaml
- name: 提交文档
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "docs: 更新 API 文档"
file_pattern: "docs/**"
变更日志生成
hljs yaml# .github/workflows/changelog.yml
name: 变更日志生成
on:
release:
types: [created]
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 设置
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g ccjk
- name: 生成变更日志
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^)
ccjk changelog generate \
--from $PREV_TAG \
--to ${{ github.ref_name }} \
--output CHANGELOG_ENTRY.md
- name: 更新发布说明
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const changelog = fs.readFileSync('CHANGELOG_ENTRY.md', 'utf8');
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ github.event.release.id }},
body: changelog
});
预提交钩子
使用 Husky 设置
hljs bash# 安装 husky
npm install -D husky
npx husky init
hljs bash# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# 运行 AI 辅助的预提交检查
npx ccjk precommit --staged-only
预提交配置
hljs yaml# .claude/precommit.yaml
checks:
- name: "代码质量"
command: ccjk lint --fix
on: ["*.ts", "*.tsx", "*.js", "*.jsx"]
- name: "安全扫描"
command: ccjk security --quick
on: ["*.ts", "*.tsx"]
block: true # 发现问题时阻止提交
- name: "提交消息"
command: ccjk commit --validate
on: commit-msg
最佳实践
1. 速率限制
避免过多的 API 调用:
hljs yaml# 只在重大更改时运行
on:
pull_request:
paths:
- 'src/**'
- '!src/**/*.test.*'
- '!src/**/*.spec.*'
- '!**/*.md'
2. 缓存
适当缓存 AI 响应:
hljs yaml- name: 缓存 AI 响应
uses: actions/cache@v3
with:
path: .ccjk-cache
key: ccjk-${{ hashFiles('src/**') }}
3. 成本管理
设置支出限制:
hljs yaml- name: AI 审查
env:
CCJK_MAX_TOKENS: 10000
CCJK_MAX_COST: 0.50
run: ccjk review --ci
4. 失败处理
优雅处理 API 失败:
hljs yaml- name: AI 审查
continue-on-error: true
id: ai-review
run: ccjk review --ci
- name: 回退通知
if: steps.ai-review.outcome == 'failure'
run: echo "AI 审查不可用,需要人工审查"
安全考虑
密钥管理
hljs yaml# 使用 GitHub secrets
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
# 永不记录密钥
- name: 审查
run: |
ccjk review --ci 2>&1 | grep -v "API"
代码隐私
配置发送给 AI 的内容:
hljs yaml# .claude/ci-config.yaml
privacy:
exclude:
- "**/*.env*"
- "**/secrets/**"
- "**/credentials/**"
redact:
- pattern: "api[_-]?key"
replacement: "[已编辑]"
- pattern: "password"
replacement: "[已编辑]"
监控和指标
跟踪 AI CI 性能
hljs yaml- name: 记录指标
run: |
echo "review_duration=${{ steps.review.outputs.duration }}" >> metrics.txt
echo "issues_found=${{ steps.review.outputs.issues }}" >> metrics.txt
echo "tokens_used=${{ steps.review.outputs.tokens }}" >> metrics.txt
- name: 发送到监控
run: |
curl -X POST ${{ secrets.METRICS_ENDPOINT }} \
-d @metrics.txt
总结
CI/CD 集成将 AI 辅助从开发者工具转变为团队范围的质量门禁。从简单的审查自动化开始,然后逐步添加更复杂的工作流。
主要好处:
- 所有 PR 的一致代码质量
- 减少人工审查负担
- 更快的反馈循环
- 自动化文档
下一步:了解 VS Code 集成以获得无缝的开发体验。
继续阅读
相关文章
#AI智能体#自动化#工作流
#ai代理#自动化#工作流
#提示工程#ai#最佳实践
