教程

Claude Code 与 GitHub Actions 集成完全指南:CI/CD 自动化的 5 个实用模式

Claude Code 整合 GitHub Actions 的 5 个完整可用模式:PR 自动代码审查(触发+评论)、空 PR 自动生成描述、测试覆盖率分析和建议、安全扫描(发现 Critical 问题阻断合并)、变更日志自动生成。每个模式含完整 YAML 配置,以及 API Key 安全管理和成本控制建议。

2026/4/245分钟 阅读ClaudeEagle

把 Claude Code 整合进 CI/CD 流水线,实现自动代码审查、PR 描述生成、测试覆盖分析——这些以前需要人工完成的任务,现在可以完全自动化。


模式 1:PR 自动代码审查

当有 PR 创建时,自动触发 Claude Code 审查,把结果作为评论发到 PR 上。

yaml
# .github/workflows/claude-review.yml
name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]
    paths:
      - 'src/**'
      - '*.ts'
      - '*.tsx'

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 需要完整历史来生成 diff

      - name: 安装 Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: 生成 PR diff
        run: |
          git diff origin/main...HEAD > pr_diff.txt
          echo "PR_DIFF<<EOF" >> $GITHUB_ENV
          cat pr_diff.txt >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: Claude Code 审查
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          claude --print --no-stream "
          审查以下 PR 改动,按优先级输出问题:
          
          ${{ env.PR_DIFF }}
          
          输出格式:
          ## 🔴 必须修改
          ## 🟡 建议修改  
          ## 💡 可以考虑
          
          如果没有问题,说'代码质量良好,无重大问题。'
          " > review_result.txt

      - name: 发布审查结果到 PR
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const review = fs.readFileSync('review_result.txt', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `## 🤖 Claude Code 自动审查\n\n${review}`
            });

模式 2:自动生成 PR 描述

新 PR 创建时,如果没有描述,自动生成:

yaml
# .github/workflows/auto-pr-description.yml
name: Auto PR Description

on:
  pull_request:
    types: [opened]

jobs:
  generate-description:
    runs-on: ubuntu-latest
    if: github.event.pull_request.body == ''  # 只在没有描述时运行
    
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 安装 Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: 生成 PR 描述
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          git log origin/main..HEAD --oneline > commits.txt
          git diff origin/main...HEAD --stat > changed_files.txt
          
          claude --print --no-stream "
          基于以下信息生成 GitHub PR 描述:
          
          Commits:
          $(cat commits.txt)
          
          变更文件:
          $(cat changed_files.txt)
          
          生成 Markdown 格式的 PR 描述,包含:
          ## 改动内容
          ## 改动类型(新功能/Bug修复/重构/文档)
          ## 测试说明
          " > pr_description.txt

      - name: 更新 PR 描述
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const description = fs.readFileSync('pr_description.txt', 'utf8');
            await github.rest.pulls.update({
              owner: context.repo.owner,
              repo: context.repo.repo,
              pull_number: context.issue.number,
              body: description
            });

模式 3:测试覆盖率分析和建议

yaml
# .github/workflows/coverage-analysis.yml
name: Coverage Analysis

on:
  pull_request:
    paths: ['src/**']

jobs:
  analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: 运行测试并生成覆盖率报告
        run: |
          npm ci
          npm run test:coverage -- --coverage-reporter=json-summary

      - name: Claude Code 分析覆盖率
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npm install -g @anthropic-ai/claude-code
          
          claude --print --no-stream "
          分析这个测试覆盖率报告,找出覆盖率低的高风险区域:
          
          $(cat coverage/coverage-summary.json)
          
          重点关注:
          1. 覆盖率低于 60% 的文件
          2. 包含业务逻辑但覆盖率低的文件(src/services/, src/lib/)
          3. 给出 3-5 条最优先需要增加测试的建议
          " > coverage_analysis.txt

      - name: 发布覆盖率分析
        uses: actions/github-script@v7
        if: github.event_name == 'pull_request'
        with:
          script: |
            const fs = require('fs');
            const analysis = fs.readFileSync('coverage_analysis.txt', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: `## 📊 测试覆盖率分析\n\n${analysis}`
            });

模式 4:安全扫描自动化

yaml
# .github/workflows/security-scan.yml
name: Security Scan

on:
  pull_request:
    paths: ['src/api/**', 'src/lib/auth/**', 'src/middleware/**']

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Claude Code 安全审查
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npm install -g @anthropic-ai/claude-code
          
          CHANGED_FILES=$(git diff origin/main...HEAD --name-only | grep -E '\.(ts|js)$' | head -20)
          
          for file in $CHANGED_FILES; do
            echo "=== $file ===" >> files_content.txt
            cat "$file" >> files_content.txt
            echo "" >> files_content.txt
          done
          
          claude --print --no-stream "
          对以下修改的文件进行安全审查:
          
          $(cat files_content.txt)
          
          检查 OWASP Top 10:
          - 注入漏洞(SQL、命令、XSS)
          - 认证和会话管理
          - 敏感数据暴露
          - 权限控制
          
          如果发现 Critical 或 High 级别问题,在输出开头加上 SECURITY_ALERT。
          " > security_result.txt

      - name: 检查是否有安全警报
        run: |
          if grep -q "SECURITY_ALERT" security_result.txt; then
            echo "::error::发现安全问题,请查看 Security Scan 步骤的详细输出"
            cat security_result.txt
            exit 1
          fi

模式 5:变更日志自动生成

yaml
# .github/workflows/changelog.yml  
name: Generate Changelog

on:
  push:
    branches: [main]
    tags: ['v*']

jobs:
  changelog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: 生成变更日志
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npm install -g @anthropic-ai/claude-code
          
          # 获取上一个 tag 到现在的 commits
          PREV_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
          if [ -n "$PREV_TAG" ]; then
            COMMITS=$(git log $PREV_TAG..HEAD --oneline)
          else
            COMMITS=$(git log --oneline -20)
          fi
          
          claude --print --no-stream "
          基于以下 commits 生成用户友好的变更日志:
          
          $COMMITS
          
          格式:
          ## 新功能 🚀
          ## Bug 修复 🐛
          ## 性能改进 ⚡
          ## 破坏性变更 ⚠️(如果有)
          
          用非技术语言,从用户角度描述。跳过纯内部或 chore 类 commits。
          " > CHANGELOG_NEW.md
          
          # 合并到现有 CHANGELOG
          if [ -f CHANGELOG.md ]; then
            cat CHANGELOG.md >> CHANGELOG_NEW.md
          fi
          mv CHANGELOG_NEW.md CHANGELOG.md

      - name: 提交变更日志
        run: |
          git config user.name "Claude Code Bot"
          git config user.email "claude-bot@example.com"
          git add CHANGELOG.md
          git commit -m "docs: update CHANGELOG [skip ci]" || true
          git push

安全配置要点

API Key 管理

  • 在 GitHub Settings → Secrets and Variables → Actions 里添加 ANTHROPIC_API_KEY
  • 不要在代码里硬编码,不要在日志里打印
  • 考虑用 OIDC token 而不是长期 API Key(更安全)

成本控制

  • CI 里用 claude-haiku-4-5(最便宜)处理简单任务
  • 安全审查用 claude-sonnet-4-6 或以上
  • --print 参数(非交互模式)
  • 设置 max_tokens 上限防止意外高费用

速率限制

  • 在 CI 里添加重试逻辑
  • 并发 PR 多时考虑排队或限流

来源:Anthropic Claude Code 官方文档 | GitHub Actions 文档 | 整理:ClaudeEagle

相关文章推荐

教程Claude Code GitHub Actions 集成指南:让 AI 自动化你的 CI/CD 流水线Claude Code GitHub Actions 让 AI 融入 GitHub 工作流,支持通过 @claude 提及触发代码审查、自动创建 PR 和修复 Bug。本文涵盖快速安装、手动配置、Beta 到 v1.0 升级指南、实用工作流示例(PR 审查、Issue 自动修复)以及 AWS Bedrock/Google Vertex AI 集成方案。2026/2/27教程Claude Code GitHub Actions 实战:用 @claude 让 AI 自动修 bug、实现功能、生成 PRClaude Code GitHub Actions 实战教程:配置 @claude 命令触发 AI 自动修 bug、实现功能、生成 PR。含 2 步快速配置、3 个工作流示例、安全设置和常见问题排查。2026/4/9教程Claude Code + GitHub Actions:自动化代码审查与 CI/CD 集成完全指南Claude Code GitHub Actions 完整配置指南:5 分钟快速安装(GitHub App + API Key Secret + Workflow 文件)、四大使用场景(按需 PR 审查/Issue 自动实现/快速修复/自动 Changelog)、每 PR 自动触发审查配置、高级参数(模型/轮数/工具限制/AWS Bedrock)与安全最佳实践。2026/3/13教程Claude Code 程序化调用完全指南:-p 标志、结构化输出、流式响应与会话续接Claude Code 程序化调用完全指南:-p/--print 非交互模式基础用法、三种输出格式(text/json/stream-json)、按 JSON Schema 提取结构化数据(structured_output 字段)、jq 解析响应、流式响应(stream-json + --verbose + --include-partial-messages + jq -rj 过滤 text_delta)、--allowedTools 自动批准工具(权限规则语法/末尾空格注意事项)、自动创建 Commit 示例、--append-system-prompt/--system-prompt 系统提示词、--continue/--resume 会话续接(Session ID 捕获)、GitHub Actions CI/CD 集成,以及 Python/TypeScript Agent SDK 高级用法入口。2026/3/8教程Claude Code 无头模式与 Agent SDK:非交互式脚本、CI/CD 集成完全指南Claude Code 无头模式与 Agent SDK 完全指南:-p 参数基础用法、三种输出格式(text/json/stream-json)、JSON Schema 结构化输出、精细工具权限控制、多轮对话 Session 管理,以及 GitHub Actions PR 安全审查和批量处理的 CI/CD 实战场景。2026/3/2教程Claude Code GitHub Actions 集成:自动化 CI/CD 工作流与 PR 代码审查Claude Code GitHub Actions 集成完整指南:PR 自动代码审查工作流、自动生成单元测试、--print 非交互模式配置、GitHub Actions 权限配置、成本控制策略,以及官方 Claude Code Action 使用方法。2026/3/1