拉取请求评论批准 - AWS CodeBuild

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

拉取请求评论批准

CodeBuild 支持拉取请求构建策略,这些策略可对由拉取请求触发的构建提供额外的控制。在未知用户的更改被审核之前,您可能不想自动生成来自未知用户的拉取请求。此功能允许您要求一名团队成员先审阅代码,然后运行管道。在构建未知贡献者提交的代码时,这通常用作安全措施。

拉取请求构建策略允许您根据贡献者的权限和批准状态控制何时为拉取请求生成 CodeBuild 触发器。这对于接受外部合作者贡献的公共存储库或存储库尤其重要。

启用后,此功能可确保只有在以下任一情况下才会触发拉取请求构建:

  • 拉取请求由可信的贡献者创建。

  • 受信任的贡献者通过发布特定评论来批准拉取请求。

工作方式

可信的贡献者

Trusted Contributor 是指在源代码控制系统中的当前角色在基于拉取请求的策略中设置为批准者角色的用户。当受信任的贡献者创建拉取请求时,会自动 CodeBuild 触发构建,保持当前行为。

不受信任的贡献者

不受信任的贡献者是指其角色未在批准者角色列表中设置的用户。当不受信任的贡献者创建拉取请求时:

  1. CodeBuild 将构建状态标记为 “失败”,并显示消息 “启动构建需要拉取请求批准”。

  2. 值得信赖的贡献者必须查看更改并发表评论/codebuild_run(<SHA_OF_THE_LATEST_COMMIT>)才能触发构建。例如 /codebuild_run(046e8b67481d53bdc86c3f6affdd5d1afae6d369)

  3. CodeBuild 验证评论者的权限,并在获得批准后触发构建。

  4. 生成结果将在拉取请求页面上报告。

评论批准语法

可信贡献者可以使用以下评论格式批准构建:

  • /codebuild_run(046e8b67481d53bdc86c3f6affdd5d1afae6d369)-触发器基于指定的提交 SHA 构建。

配置

默认行为

默认情况下,所有新创建的 CodeBuild 项目均启用拉取请求构建策略。

API 参数

拉取请求生成策略是使用以下操作中的PullRequestBuildPolicy参数配置的:

  • CreateWebhook

  • UpdateWebhook

PullRequestBuildPolicy结构
{ "requiresCommentApproval": "string", "approverRoles": ["string", ...] }
requiresCommentApproval

指定在触发基于拉取请求的构建之前,何时需要基于评论的批准。此设置决定构建版本是自动运行还是需要通过评论进行明确批准。

类型:字符串

有效值:

  • DISABLED-无需评论批准即可自动触发构建。

  • FORK_PULL_REQUESTS-只有来自分叉仓库的拉取请求才需要评论批准(除非贡献者是审批者角色之一)。

  • ALL_PULL_REQUESTS-所有拉取请求都需要在构建执行之前获得评论批准(除非贡献者是批准者角色之一)。这是默认值。

approverRoles

当需要评论批准时,具有拉取请求生成审批权限的存储库角色列表。只有拥有这些角色的用户才能提供有效的评论批准。如果拉取请求贡献者是这些角色之一,则他们的拉取请求构建将自动触发。

类型:字符串数组

GitHub 项目的有效值(这些值映射到 GitHub 角色):

  • GITHUB_ADMIN-存储库管理员

  • GITHUB_MAINTAIN-存储库维护者

  • GITHUB_WRITE-具有写入权限的用户

  • GITHUB_TRIAGE-具有会审权限的用户

  • GITHUB_READ-具有读取权限的用户

  • 默认值:["GITHUB_ADMIN", "GITHUB_MAINTAINER", "GITHUB_WRITE"]

GitLab 项目的有效值(这些值映射到 GitLab 角色):

  • GITLAB_OWNER-存储库所有者

  • GITLAB_MAINTAINER-存储库维护者

  • GITLAB_DEVELOPER-拥有开发者权限的用户

  • GITLAB_REPORTER-具有记者权限的用户

  • GITLAB_PLANNER-拥有计划者权限的用户

  • GITLAB_GUEST -拥有访客权限的用户

  • 默认值:["GITLAB_OWNER", "GITLAB_MAINTAINER", "GITLAB_DEVELOPER"]

Bitbucket 项目的有效值(这些值映射到 Bitbucket 角色):

  • BITBUCKET_ADMIN -存储库管理员

  • BITBUCKET_WRITE-具有写入权限的用户

  • BITBUCKET_READ -具有读取权限的用户

  • 默认值:["BITBUCKET_ADMIN", "BITBUCKET_WRITE"]

示例

为所有拉取请求启用评论批准

要使用 AWS CodeBuild SDK 为 webhook 启用或禁用 Pull Request Build 策略,请使用CreateWebhookUpdateWebhook API 方法的请求语法中的pullRequestBuildPolicy字段。有关更多信息,请参阅 CodeBuild API 参考中的 WebhookFilter

拥有 Github 管理员角色、维护角色和写作角色的用户将被视为可信贡献者。

"pullRequestBuildPolicy": { "requiresCommentApproval": "ALL_PULL_REQUESTS", "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAIN", "GITHUB_WRITE"] }
仅为仓库管理员和维护者启用评论批准

拥有 “管理员”、“维护” GitHub 角色的用户将被视为可信贡献者。

"pullRequestBuildPolicy": { "requiresCommentApproval": "FORK_PULL_REQUESTS", "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAINER"] }
禁用评论批准
"pullRequestBuildPolicy": { "requiresCommentApproval": "DISABLED" }

AWS CloudFormation

要使用 AWS CloudFormation 模板为 webhook 启用或禁用 Pull Request Build 策略,请使用 PullRequestBuildPolicy 属性。 AWS CloudFormation 模板中以下 YAML 格式的部分创建了一个带有 webhook 的项目,该挂钩已为所有拉取请求启用拉取请求构建策略。指定为批准者的维护和管理员角色。

CodeBuildProject: Type: AWS::CodeBuild::Project Properties: Name: MyProject ServiceRole: service-role Artifacts: Type: NO_ARTIFACTS Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:5.0 Source: Type: BITBUCKET Location: source-location Triggers: Webhook: true FilterGroups: - - Type: EVENT Pattern: PULL_REQUEST_CREATED,PULL_REQUEST_UPDATED - Type: BASE_REF Pattern: ^refs/heads/main$ ExcludeMatchedPattern: false PullRequestBuildPolicy: RequiresCommentApproval: ALL_PULL_REQUESTS ApproverRoles: - GITHUB_MAINTAIN - GITHUB_ADMIN

控制台配置

要使用 AWS 管理控制台筛选 webhook 事件,请执行以下操作:

  1. 要获得评论批准,请选择禁用或启用所有拉取请求 (ALL_PULL_REQUEST),或者仅针对来自分叉的拉取请求 (FORK_PULL_REQUEST)。

  2. 对于批准者角色,请选择在需要评论批准时对拉取请求生成具有批准权限的存储库角色。

有关更多信息,请参阅《CodeBuild API 参考》中的创建构建项目(控制台)WebhookFilter

带有评论批准的主要来源 webhook 事件控制台。