GitHub Actions 与 CI
本教程共 34 篇 · 第 28 篇 · 更新于 2026-07-26 · 约 8 分钟阅读
28. GitHub Actions 与 CI
本节目标:学会把 Claude Code 装进 GitHub Actions,让它在 PR 和 Issue 里随叫随到,甚至定时无人值守地帮你干活。
把 Claude 搬进 GitHub Actions
前面几章讲的 Claude Code 都是你坐在终端前、一条一条跟它对话。但很多时候你想让它自己动起来:有人提了 Issue,自动分析;有新 PR,自动审查;每天早上,自动汇总昨天的提交。
Claude Code GitHub Actions 就是干这个的。它是一个官方的 GitHub Action,跑在 GitHub 的运行器(runner)上。你只要在 PR 或 Issue 评论里 @ 一下它,它就能分析代码、创建 PR、实现功能、修 Bug,而且会遵守你 CLAUDE.md 里写的规范。
打个比方:之前 Claude 是你桌上的同事,你得喊它才干活;装进 GitHub Actions 后,它变成了一个 7x24 小时在线的值班工程师,仓库里有动静它就响应。
它能干什么
- 即时创建 PR:描述你要啥,Claude 直接给你开一个改好代码的 PR
- Issue 转代码:一条命令把 Issue 变成能跑的代码
- 自动审查:新 PR 一开,自动审查代码质量、正确性和安全
- 遵循项目标准:读你的
CLAUDE.md,按你团队的规矩办事 - 代码不出运行器:代码留在 GitHub 的 runner 上跑,不外泄
NoteClaude Code GitHub Actions 建立在 Claude Agent SDK 之上。你可以用这个 SDK 搭出超越 GitHub Actions 的自定义自动化,这块在第 29 章会提到。
两种安装方式
快速安装(推荐)
在 Claude Code 终端里跑一个斜杠命令(Slash Command):
/install-github-app
它会交互式地引导你完成三件事:在你的仓库装上 Claude GitHub App、加好 GitHub Actions 工作流、配好 API 密钥。
v2.1.187 及以上版本,你可以选暂时跳过工作流步骤,只装 App,以后再跑一次 /install-github-app 回来完成工作流和密钥配置。
Warning你必须是仓库管理员才能装 GitHub App 和加密钥。而且这个快速安装只适用于直接用 Claude API 的用户。如果你走 Amazon Bedrock 或 Google Cloud 的 Agent Platform,得看后面的手动配置部分。
手动安装
快速安装失败了,或者你就是想自己掌控,走手动三步:
-
装 Claude GitHub App:访问
https://github.com/apps/claude,装到你的仓库。它需要三个权限:Contents(读写)、Issues(读写)、Pull requests(读写) -
加 API 密钥:在仓库的 Settings - Secrets and variables - Actions 里,加一个叫
ANTHROPIC_API_KEY的密钥 -
复制工作流文件:从官方仓库的
examples/claude.yml复制一份,放到你仓库的.github/workflows/目录下
装完之后,在任意 Issue 或 PR 评论里 @claude 测试一下,看它是不是响应了。
工作流配置
Claude Code Action v1 把配置简化了,核心就一个 anthropics/claude-code-action@v1。它会根据你的配置自动判断是交互模式(响应 @claude 提及)还是自动化模式(直接用 prompt 跑)。
响应 @claude 提及
最基础的工作流,监听评论,谁 @claude 它就响应谁:
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 提及
自动审查 PR
不想等人 @,PR 一开就自动审查。用 prompt 参数给指令,配合 PR 触发事件:
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."
claude_args: "--max-turns 5"
synchronize 表示 PR 有新提交时也触发,这样每次 push 都会重新审查。
定时任务无人值守
用 GitHub Actions 的 schedule + cron 表达式,让 Claude 定时干活,机器关了也不影响:
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"
这个例子每天早上 9 点跑一次,让 Claude 汇总昨天的提交和未关闭的 Issue。
Tip给定时任务写 prompt 时,把「成功长什么样」「结果怎么处理」说清楚。任务自己跑,没法反问你。比如「审查标记为 needs-review 的开放 PR,对问题留内联评论,摘要发到 Slack 频道」。
用 Skills 跑审查
prompt 参数不光能写纯文本,还能调技能(Skill)。下面这个工作流装上 code-review 插件,在每个新 PR 上跑它的审查 skill:
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 }}
plugin_marketplaces: "https://github.com/anthropics/claude-plugins-official.git"
plugins: "code-review@claude-plugins-official"
prompt: "/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}"
仓库 .claude/skills/ 里的本地 skill 也行,记得在 action 步骤前先跑 actions/checkout,然后传 /skill-name。
@claude 常用命令
装好之后,在 PR 或 Issue 评论里直接 @ 它就行:
@claude implement this feature based on the issue description
@claude fix the TypeError in the user dashboard component
@claude review this PR for security issues
@claude add tests for this new function
Claude 会自动分析上下文,该改代码改代码,该回评论回评论。
Warning触发词是
@claude,不是/claude。写错了它不响应。trigger_phrase参数可以改成别的词,但默认就是@claude。
Action 参数速查
v1 版本的常用参数:
| 参数 | 说明 | 必填 |
|---|---|---|
anthropic_api_key | Claude API 密钥 | 是(直连 API 时) |
prompt | 给 Claude 的指令,纯文本或 skill 名 | 否 |
claude_args | 传给 Claude Code 的 CLI 参数 | 否 |
github_token | 访问 GitHub API 的令牌 | 否 |
trigger_phrase | 自定义触发词,默认 @claude | 否 |
plugin_marketplaces | 插件市场 Git URL 列表 | 否 |
plugins | 执行前要装的插件列表 | 否 |
use_bedrock | 用 Amazon Bedrock 代替直连 API | 否 |
use_vertex | 用 Google Cloud 的 Agent Platform | 否 |
claude_args 能接任何 Claude Code CLI 参数,常用的有:
--max-turns:最大对话轮数,默认 10--model:指定模型,比如claude-sonnet-5--allowedTools/--disallowedTools:允许或禁止的工具--mcp-config:MCP 配置文件路径--debug:开调试输出
Note从 beta 升级到 v1 有破坏性改动:
mode配置删了(现在自动检测),direct_prompt改名prompt,max_turns、model、custom_instructions这些都挪进了claude_args。老工作流要照着官方的迁移表改一遍。
成本与安全
别把密钥写进代码
这是红线。API 密钥永远用 GitHub Secrets:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
千万别图省事直接写在工作流文件里,一旦仓库泄露,密钥就被人薅走了。
成本优化
跑 GitHub Actions 有两块成本:
- GitHub Actions 分钟数:Claude 跑在 GitHub 托管的 runner 上,会消耗你的 Actions 配额
- API token 费用:每次交互按 prompt 和响应长度消耗 token,任务越复杂、代码库越大花得越多
几个省钱招:
- 用明确的
@claude命令,减少不必要的 API 调用 - 在
claude_args里配--max-turns,防止 Claude 死循环迭代 - 给工作流设超时,避免失控的 job 烧钱
- 用 GitHub 的并发控制,限制并行运行数量
企业云部署
如果你公司用 Amazon Bedrock 或 Google Cloud 的 Agent Platform,不用直连 Anthropic API。配置上要加 use_bedrock: "true" 或 use_vertex: "true",再用 OIDC 身份联合做认证,这样不用存静态密钥,更安全。
这块配置比较繁琐,涉及 IAM 角色、工作负载身份池等,建议让运维同学配合搞。详细步骤看官方文档的「Using with Amazon Bedrock and Google Cloud」部分。
排错小抄
Claude 不响应 @claude?按这个顺序查:
- GitHub App 装了没、装对仓库没
- 工作流文件在
.github/workflows/下没、启用了没 ANTHROPIC_API_KEY密钥加没加、名字对不对- 评论里写的是
@claude不是/claude
CI 不在 Claude 的提交上跑?这是因为用 Actions 用户提交不会触发 CI。换成 GitHub App 或自定义 App 就行,它们的提交会正常触发后续工作流。