Skip to content

GitHub Actions 集成

Claude Code GitHub Actions 将 AI 自动化引入 GitHub 工作流。在 PR 或 Issue 中提及 @claude,Claude 就能分析代码、创建 PR、实现功能或修复 Bug。

能做什么

  • 即时创建 PR:描述需求,Claude 生成完整 PR
  • 自动代码实现:一条命令把 Issue 变成可运行代码
  • 自动代码审查:PR 打开时自动触发审查
  • 遵循项目规范:自动读取 CLAUDE.md 中的代码风格指南
  • 定时自动化:每天定时生成报告、检查代码质量

快速安装

方式一:通过 Claude Code CLI(推荐)

在终端启动 Claude Code,运行斜杠命令:

/install-github-app

会引导你完成 GitHub App 安装和 Secrets 配置。

方式二:手动安装

第一步:安装 Claude GitHub App

所需 GitHub 权限:

  • Contents:读写(提交代码)
  • Issues:读写(评论 Issue)
  • Pull requests:读写(创建/评论 PR)

第二步:在仓库 Settings → Secrets 中添加 ANTHROPIC_API_KEY

第三步:创建工作流文件 .github/workflows/claude.yml(见下方示例)

基础工作流

响应任意评论中的 @claude 提及:

yaml
name: Claude Code
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
jobs:
  claude:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

配置好后,你可以这样触发:

@claude 修复 README 中的拼写错误
@claude 为 src/auth.ts 写单元测试
@claude 审查这个 PR 的安全隐患
@claude 实现 Issue #123 描述的功能

常用工作流示例

自动代码审查(PR 创建时触发)

yaml
name: Code Review
on:
  pull_request:
    types: [opened, synchronize]
jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            审查这个 Pull Request:
            1. 检查代码质量和可读性
            2. 找出潜在的 Bug 和安全问题
            3. 验证逻辑是否正确
            4. 以 review comment 形式给出具体反馈
          claude_args: "--max-turns 5"

定时代码质量报告

yaml
name: Daily Code Report
on:
  schedule:
    - cron: "0 9 * * 1-5"    # 工作日早上 9 点
jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            分析昨天的提交:
            1. 总结主要变更
            2. 指出潜在的技术债务
            3. 建议需要跟进的事项
          claude_args: "--model sonnet --max-turns 3"

Issue 自动实现功能

yaml
name: Implement Issue
on:
  issues:
    types: [assigned]
jobs:
  implement:
    if: contains(github.event.issue.body, '@claude')
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          claude_args: "--max-turns 20"

完整配置(含权限声明)

yaml
name: Claude PR Action

permissions:
  contents: write
  pull-requests: write
  issues: write

on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]
  issues:
    types: [opened, assigned]

jobs:
  claude-pr:
    if: |
      (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
      (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Run Claude
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

配置参数

参数说明是否必填
prompt给 Claude 的固定指令(PR 打开时自动执行)
claude_args传给 Claude Code CLI 的参数
anthropic_api_keyClaude API Key直连 API 时必填
github_tokenGitHub API Token(默认使用 GITHUB_TOKEN)
trigger_phrase自定义触发词,默认 @claude
use_bedrock使用 AWS Bedrock
use_vertex使用 Google Vertex AI

常用 claude_args

yaml
claude_args: >
  --max-turns 10
  --model claude-sonnet-4-6
  --mcp-config /path/to/mcp.json
  --allowedTools "Bash(git *)" "Read" "Edit"
  --append-system-prompt "始终用中文回复"
参数说明
--max-turns最大对话轮数(默认 10)
--model模型名称
--mcp-configMCP 服务器配置文件路径
--allowedTools允许的工具列表
--disallowedTools禁止的工具列表
--append-system-prompt追加到系统提示的文本
--debug开启调试输出
--permission-mode plan只读计划模式

使用 AWS Bedrock

不想使用 Anthropic 直连 API,可以走 AWS Bedrock:

所需 Secrets:

  • AWS_ROLE_TO_ASSUME:IAM Role ARN
  • APP_ID:GitHub App ID
  • APP_PRIVATE_KEY:GitHub App 私钥
yaml
name: Claude with Bedrock

permissions:
  contents: write
  pull-requests: write
  issues: write
  id-token: write    # OIDC 必须

on:
  issue_comment:
    types: [created]

jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    env:
      AWS_REGION: us-west-2
    steps:
      - uses: actions/checkout@v4

      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Configure AWS Credentials (OIDC)
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          aws-region: us-west-2

      - uses: anthropics/claude-code-action@v1
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          use_bedrock: "true"
          claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

使用 Google Vertex AI

所需 Secrets:

  • GCP_WORKLOAD_IDENTITY_PROVIDER:Workload Identity Provider 资源名
  • GCP_SERVICE_ACCOUNT:服务账号邮箱
  • APP_ID:GitHub App ID
  • APP_PRIVATE_KEY:GitHub App 私钥
yaml
name: Claude with Vertex AI

permissions:
  contents: write
  pull-requests: write
  issues: write
  id-token: write    # OIDC 必须

on:
  issue_comment:
    types: [created]

jobs:
  claude:
    if: contains(github.event.comment.body, '@claude')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Generate GitHub App token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - name: Authenticate to Google Cloud
        id: auth
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
          service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

      - uses: anthropics/claude-code-action@v1
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          use_vertex: "true"
          claude_args: '--model claude-sonnet-4@20250514 --max-turns 10'
        env:
          ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}
          CLOUD_ML_REGION: us-east5

从 Beta 升级到 v1.0

如果你还在用 Beta 版本,以下是主要变化:

Beta 参数v1.0 等效写法
mode已移除,自动检测
direct_promptprompt
custom_instructionsclaude_args: --append-system-prompt "..."
max_turnsclaude_args: --max-turns N
modelclaude_args: --model <name>
allowed_toolsclaude_args: --allowedTools "..."
disallowed_toolsclaude_args: --disallowedTools "..."

升级示例:

yaml
# Beta 写法
- uses: anthropics/claude-code-action@beta
  with:
    mode: "tag"
    direct_prompt: "检查代码安全问题"
    custom_instructions: "遵循我们的编码规范"
    max_turns: "10"
    model: "claude-sonnet-4-6"

# v1.0 写法
- uses: anthropics/claude-code-action@v1
  with:
    prompt: "检查代码安全问题"
    claude_args: |
      --append-system-prompt "遵循我们的编码规范"
      --max-turns 10
      --model claude-sonnet-4-6

常见问题

Claude 不响应 @claude 命令

  • 确认 GitHub App 已安装到对应仓库
  • 确认 Workflow 文件已推送并在 Actions 中启用
  • 检查 Secrets 中是否有 ANTHROPIC_API_KEY
  • 评论内容是否包含 @claude(不是 /claude

Claude 提交代码后 CI 不触发

  • GitHub Actions 用户创建的事件不会触发其他工作流(防止循环)
  • 解决方案:创建 GitHub App,用 App Token 代替 GITHUB_TOKEN
  • App 创建的事件会正常触发其他工作流

认证失败

  • 检查 ANTHROPIC_API_KEY 是否有效且未过期
  • Bedrock:确认 IAM Role 有足够权限,AWS_REGION 设置正确
  • Vertex:确认服务账号有 Vertex AI User 角色,项目 ID 正确

Workflow 超时

  • 增加 --max-turns 值(默认 10)
  • 复杂任务建议设置 timeout-minutes: 30 在 job 级别

安全最佳实践

  1. 使用 GitHub App 而非 PAT:GitHub App 权限更精细,可以限制到特定仓库
  2. 限制 Claude 工具:用 --allowedTools 只允许必要的工具
  3. 只读计划模式:敏感仓库可以用 --permission-mode plan 只让 Claude 分析不让修改
  4. 限制触发条件:用 if 条件精确控制哪些事件触发 Claude
  5. 不要暴露 secrets:避免在 prompt 中输出或记录敏感信息

相关资源