指南

CI/CD 集成:自动化 AI 辅助工作流

将 CCJK 集成到 CI/CD 流水线中,实现自动化代码审查、测试生成和文档更新。

C
CCJK 团队2025年1月3日
14 分钟阅读
895 次阅读
CI/CD 集成:自动化 AI 辅助工作流

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 集成以获得无缝的开发体验。

标签

#cicd#自动化#github-actions#devops#流水线

分享文章

继续阅读

相关文章