加载中

GitHub Actions 与代码审查

第 7 课6 分钟
加载中

GitHub Actions 与代码审查

交接重复性工作的最佳场所是拉取请求(pull request)。这是审查发生的地方,是变更落地的地方,也是您大量琐碎工作所在的地方。在这里让Claude发挥作用有两种方式,它们解决的是不同的问题。一种是您开启的托管服务。另一种是您自己接入的GitHub Action。让我们逐一了解这两种方式,并弄清楚何时该用哪一种。

托管路径:代码审查

最简单的选项是代码审查(Code Review)。这是一项由Anthropic托管的服务,通过Claude GitHub应用审查您的拉取请求。您无需构建或托管任何东西。只需开启它,它就会开始在相关代码行上发布内联评论形式的发现。

您的Claude组织的所有者(Owner)可以从Claude Code管理设置中启用它。您会找到一个"代码审查"部分,其中有一个"允许代码审查"开关,用于启动设置。

之后,所有者会安装Claude GitHub应用,选择它要监视的仓库,并决定它何时运行。如果该所有者不是GitHub组织的所有者,则必须先由GitHub组织所有者安装并关联该应用。您可以在以下几种时机中选择:

  • 在PR打开时运行一次
  • 在PR的每次推送时运行
  • 仅当有人评论@claude review时运行

一旦开启,一切都在Anthropic的基础设施上运行。一组审查代理会针对您的完整代码库分析差异(diff),而不仅仅是孤立地查看变更的行。然后,它会在具体的行上发布内联评论形式的发现,按严重程度打标签,并在检查运行(check run)中附上摘要表。

下面是其中一个发现的样子。它以Claude发出的评论形式出现,就在那一行上,附有清晰的解释和建议的修复方案。

好的一点是,它会对发现进行去重和排序。因此,您读到的不是一堆琐碎的挑剔意见,而是少数几个真正值得您关注的问题。

代码审查能做什么、不能做什么

关于这里的边界,有几点需要牢记:

  • 它从不批准或阻止PR。判断权始终在人类手中。Claude标记问题;由您来决定。
  • 它不会推送修复。该服务只发布发现。
  • 它仅在Team和Enterprise计划中可用。

由于该服务只发布发现,采取行动是您的事:修复代码并推送。要在推送前检查您的修复,请在您自己的终端中运行/code-review。它会对您的差异(diff)运行自己的审查,其--fix标志会将该审查的发现应用到您的工作树中。

自己动手的路径:GitHub Action

代码审查处理的是审查工作。当任务超出审查范围时,您就需要用到GitHub Action。这适用于自定义CI:根据评论实现变更、运行定期报告,以及任何您通常会为之编写工作流的事情。它会在PR评论、定期任务以及任何GitHub事件上运行该代理。

设置从Claude Code内部开始。运行/install-github-app命令。您需要拥有仓库管理员权限才能执行此操作。该斜杠命令会引导您完成安装GitHub应用以及在仓库上设置Anthropic API密钥密文的过程。

该action本身是anthropics/claude-code-action@v1。以下是您实际会用到的输入项:

  • anthropic_api_key — 当运行需要调用Claude API时为必填项,除非您使用claude_code_oauth_token(来自Claude订阅)或工作负载身份联合(通过Claude Console服务账户设置,因此无需存储密文)进行身份验证。使用下方的云提供商时不需要此项。
  • github_token — 可选。不填写时,该action会以您在设置时安装的Claude GitHub应用身份进行身份验证。仅在需要覆盖该行为时才传入令牌。
  • trigger_phrase — action在评论中监听的内容。默认值为@claude。
  • use_bedrock / use_vertex / use_foundry — 将运行路由到Amazon Bedrock、Google Cloud's Agent Platform或Microsoft Foundry,而不是Claude API,使用您的云账户登录而非API密钥。
  • prompt — 自动化运行的指令。设置此项后,Claude会在事件发生时运行,而无需等待提及。不填写时,action会等待触发短语。
  • claude_args — 一串直接传递给Claude Code的CLI参数。

一个响应@claude的工作流

将一个工作流放入.github/workflows/claude.yaml,它就会监听PR评论和issue评论中的@claude。在该任务的permissions下,授予id-token: write,以便该action能够以Claude GitHub应用的身份登录。核心步骤如下所示:

yaml
- uses: anthropics/claude-code-action@v1
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    trigger_phrase: "@claude"
    claude_args: "--max-turns 5 --model claude-sonnet-5"

现在,有人在拉取请求上写下@claude implement the spec in the linked Linear issue,该action就会接手处理。Claude会推送提交并发布描述其所做工作的评论。

一个按计划运行的工作流

同一个action也适用于每日汇总报告。一个cron触发器会在比如说UTC时间9:00触发,该action运行您的prompt,您可以在该次运行的日志中读取汇总结果。按计划运行的任务不会自行发布评论。您还可以添加一个workflow_dispatch触发器,以便您可以从Actions标签页手动启动它。

当该action运行时,您可以在Actions标签页中观察它逐步执行,就像任何其他GitHub工作流一样。

使用claude_args调优运行

claude_args这一行是进行精细调优的地方。有几个值得了解的调节项:

  • --max-turns 5对代理循环设置了硬性上限,使其不会无限运行下去。
  • 权限模式。对于无人值守的任务,您会希望它不要停下来询问,因为那里没有人来回答。
  • 允许的工具。只给任务它所需要的东西,不多不少。对于一份报告而言,这意味着只读权限。

您应该使用哪一种?

简而言之:

  • 对于PR审查,采用托管路径。启用代码审查,让GitHub应用发布内联发现,然后修复代码并推送。
  • 当任务超出审查范围时,使用该action。用/install-github-app进行设置,一个工作流用于@claude提及,一个用于cron,所有调优都在claude_args中完成。

从托管服务开始。当您需要Claude在CI中真正做些什么,而不仅仅是评论时,再转向该action。