Appearance
Claude Code GitHub Actions
Claude Code GitHub Actions 让你在任何 PR 或 Issue 中用 @claude 提及触发 AI 自动化——代码审查、功能实现、Bug 修复,全部遵循你的 CLAUDE.md 项目规范。v1.0 GA 版简化了配置(统一的 prompt 输入、claude_args CLI 透传),自动检测交互模式,支持直接 API 或 AWS Bedrock/Google Vertex AI 企业部署。通过 /install-github-app 命令可快速完成安装。
Claude Code GitHub Actions 将 AI 自动化引入 GitHub 工作流。在任意 PR 或 Issue 中 @claude,Claude 分析代码、创建 PR、实现功能、修复 Bug——遵循你的项目规范。
自动在每个 PR 上发布评审(无需触发词)的功能,见 GitHub Code Review。
核心能力:
- 即时 PR 创建:描述需求,Claude 创建包含所有变更的完整 PR
- 自动代码实现:Issue 转工作代码,一条命令搞定
- 遵循项目规范:读取
CLAUDE.md和现有代码模式 - 简单安装:
/install-github-app命令几分钟完成 - 默认安全:代码在 GitHub runners 上运行
安装
快速安装(推荐)
在 Claude Code 终端运行:
/install-github-app此命令引导完成 GitHub App 安装和所需 Secrets 配置。
手动安装
如果 /install-github-app 失败或需要手动控制:
在仓库安装 Claude GitHub App
所需仓库权限:
- Contents:Read & write(修改仓库文件)
- Issues:Read & write(响应 Issues)
- Pull requests:Read & write(创建 PR 和推送变更)
将
ANTHROPIC_API_KEY添加到仓库 Secrets将 examples/claude.yml 复制到仓库的
.github/workflows/
从 Beta 升级到 v1.0
如果你在使用 Beta 版,建议迁移到 GA 版(@v1)。
必须更改的内容
- 更新 Action 版本:将
@beta改为@v1 - 删除 mode 配置:删除
mode: "tag"或mode: "agent"(现在自动检测) - 更新 prompt 输入:将
direct_prompt改为prompt - 迁移 CLI 选项:将
max_turns、model、custom_instructions等移入claude_args
变更对照表
| Beta 输入 | v1.0 输入 |
|---|---|
mode | 已删除(自动检测) |
direct_prompt | prompt |
override_prompt | prompt(配合 GitHub 变量) |
custom_instructions | claude_args: --append-system-prompt |
max_turns | claude_args: --max-turns |
model | claude_args: --model |
allowed_tools | claude_args: --allowedTools |
disallowed_tools | claude_args: --disallowedTools |
claude_env | settings JSON 格式 |
前后对比
Beta 版:
yaml
- uses: anthropics/claude-code-action@beta
with:
mode: "tag"
direct_prompt: "Review this PR for security issues"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
custom_instructions: "Follow our coding standards"
max_turns: "10"
model: "claude-sonnet-4-6"GA v1.0:
yaml
- uses: anthropics/claude-code-action@v1
with:
prompt: "Review this PR for security issues"
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: |
--append-system-prompt "Follow our coding standards"
--max-turns 10
--model claude-sonnet-4-6使用示例
基础工作流
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 提及代码审查工作流
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: "Review this pull request for code quality, correctness, and security. Analyze the diff, then post your findings as review comments."
claude_args: "--max-turns 5"定时报告
yaml
name: Daily Report
on:
schedule:
- cron: "0 9 * * *"
jobs:
report:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "Generate a summary of yesterday's commits and open issues"
claude_args: "--model opus"Issue/PR 评论中的常见命令
@claude implement this feature based on the issue description
@claude how should I implement user authentication for this endpoint?
@claude fix the TypeError in the user dashboard component使用 AWS Bedrock 或 Google Vertex AI
企业环境中可以通过自己的云基础设施运行 Claude Code,掌控数据驻留和费用。
AWS Bedrock 工作流
前置条件:
- Amazon Bedrock 开启了所需 Claude 模型的访问权限
- GitHub 在 AWS 中配置为 OIDC 身份提供商
- IAM 角色具有 Bedrock 权限,可信任 GitHub Actions
所需 Secrets:
| Secret | 说明 |
|---|---|
AWS_ROLE_TO_ASSUME | Bedrock 访问的 IAM 角色 ARN |
APP_ID | GitHub App ID |
APP_PRIVATE_KEY | GitHub App 私钥 |
yaml
name: Claude PR Action
permissions:
contents: write
pull-requests: write
issues: write
id-token: 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
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 工作流
前置条件:
- GCP 项目启用 Vertex AI API
- 为 GitHub 配置 Workload Identity Federation
- 服务账号具有 Vertex AI 权限
所需 Secrets:
| Secret | 说明 |
|---|---|
GCP_WORKLOAD_IDENTITY_PROVIDER | Workload identity provider 资源名称 |
GCP_SERVICE_ACCOUNT | 具有 Vertex AI 访问权限的服务账号邮箱 |
APP_ID | GitHub App ID |
APP_PRIVATE_KEY | GitHub App 私钥 |
yaml
# ... (同上 permissions 和 on 配置)
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 }}
trigger_phrase: "@claude"
use_vertex: "true"
claude_args: '--model claude-sonnet-4-5@20250929 --max-turns 10'
env:
ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}
CLOUD_ML_REGION: us-east5
VERTEX_REGION_CLAUDE_4_5_SONNET: us-east5最佳实践
CLAUDE.md 配置
在仓库根目录创建 CLAUDE.md,定义代码风格、审查标准和项目特定规则。Claude 会在创建 PR 和响应请求时遵循这些规则,详见Memory 文档。
安全注意事项
API Key 必须通过 GitHub Secrets 传递,不能硬编码在工作流文件中:
yaml
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}- 限制 Action 权限为最小必要权限
- 合并前审查 Claude 的建议
- 完整安全指南见 Claude Code Action 安全文档
费用控制
GitHub Actions 费用:
- Claude Code 在 GitHub runners 上运行,消耗 Actions 分钟数
API 费用:
- 每次 Claude 交互消耗 token,用量取决于任务复杂度和代码库大小
优化建议:
- 使用具体的
@claude命令,减少不必要的 API 调用 - 在
claude_args中配置--max-turns防止过多迭代 - 设置工作流级别的超时,避免任务失控
- 使用 GitHub 并发控制限制并行运行数量
Action 参数参考
| 参数 | 说明 | 是否必填 |
|---|---|---|
prompt | Claude 的指令(纯文本或 Skill 名称) | 否* |
claude_args | 传给 Claude Code 的 CLI 参数 | 否 |
anthropic_api_key | Claude API Key | 是** |
github_token | GitHub API 访问 token | 否 |
trigger_phrase | 自定义触发词(默认 "@claude") | 否 |
use_bedrock | 使用 AWS Bedrock 代替 Claude API | 否 |
use_vertex | 使用 Google Vertex AI 代替 Claude API | 否 |
*直接 API 模式下必填
**Bedrock/Vertex 模式下不需要
常用 claude_args
claude_args: "--max-turns 5 --model claude-sonnet-4-6 --mcp-config /path/to/config.json"--max-turns:最大对话轮数(默认 10)--model:使用的模型--mcp-config:MCP 配置路径--allowedTools:允许的工具(逗号分隔)--debug:开启调试输出
故障排查
| 问题 | 检查点 |
|---|---|
| Claude 不响应 @claude | 确认 App 已安装、工作流已启用、Secret 已设置、评论包含 @claude 而非 /claude |
| CI 不在 Claude 的提交上运行 | 使用 GitHub App 或自定义 App(不用 Actions user),检查工作流触发器 |
| 认证错误 | 确认 API Key 有效;Bedrock/Vertex 检查凭据配置和 Secret 名称 |
相关文档
- Claude Code Action 仓库
- GitHub Code Review:自动评审每个 PR
- Memory(CLAUDE.md):自定义 Claude 行为
- GitLab CI/CD 集成:GitLab 版本
常见问题
Q: 使用 GitHub Actions 集成需要安装 Claude GitHub App 吗?
推荐安装,这是最简单的方式(通过 /install-github-app 自动完成)。也可以使用自定义 GitHub App 或直接配置工作流,详见高级配置。
Q: 企业用户想用 Bedrock 或 Vertex,是否支持?
完全支持。通过 use_bedrock: "true" 或 use_vertex: "true" 参数启用,配合 OIDC 认证无需长期密钥。
Q: 如何防止 Claude 的 AI 生成代码不经审查就合并?
Claude 的代码变更通过标准 PR 流程提交,所有分支保护规则和审查要求同样适用于 AI 生成的代码。合并前审查 Claude 的建议与审查普通 PR 一样。