拉取请求评论批准
CodeBuild 支持拉取请求构建策略,这些策略可以对由拉取请求触发的构建提供额外的控制。您可能不想自动构建来自未知用户的拉取请求,直到可以审查其更改。此功能可让您要求一名团队成员先审查代码,然后运行管道。这通常用作在构建未知贡献者提交的代码时的安全措施。
拉取请求构建策略支持您根据贡献者的权限和批准状态,来控制 CodeBuild 何时对拉取请求触发构建。这对于公共存储库或接受外部协作者贡献的存储库尤为重要。
启用后,此功能可确保只有在以下任一情况下,才会为拉取请求触发构建:
-
拉取请求由可信贡献者创建。
-
可信贡献者通过发布特定评论来批准拉取请求。
工作方式
- 可信贡献者
-
可信贡献者是指源代码控制系统中的当前角色在基于拉取请求的策略中设置为批准者角色的用户。当可信贡献者创建拉取请求时,CodeBuild 会自动触发构建,并保持当前行为。
- 不可信贡献者
-
不可信贡献者是指其角色未在批准者角色列表中设置的用户。当不可信贡献者创建拉取请求时:
-
CodeBuild 将构建状态标记为“失败”,并显示消息“启动构建需要拉取请求批准”。
-
可信贡献者必须审核更改并使用
/codebuild_run(发布评论才能触发构建。例如<SHA_OF_THE_LATEST_COMMIT>)/codebuild_run(。046e8b67481d53bdc86c3f6affdd5d1afae6d369) -
CodeBuild 会验证评论者的权限,并在获得批准后触发构建。
-
构建结果将在拉取请求页面上报告。
-
- 评论批准语法
-
可信贡献者可以使用以下评论格式批准构建:
-
/codebuild_run(:基于指定的提交 SHA 触发构建。046e8b67481d53bdc86c3f6affdd5d1afae6d369)
-
配置
- 默认行为
-
默认情况下,为所有新创建的 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 启用或禁用拉取请求构建策略,请使用
CreateWebhook或UpdateWebhookAPI 方法的请求语法中的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 的拉取请求构建策略,请使用 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 事件:
-
对于评论批准,请针对所有拉取请求 (
ALL_PULL_REQUEST) 或仅针对来自分叉的拉取请求 (FORK_PULL_REQUEST) 选择已禁用或已启用。 -
对于批准者角色,选择当需要评论批准时对拉取请求构建具有批准权限的存储库角色列表。
有关更多信息,请参阅《CodeBuild API 参考》中的创建构建项目(控制台)和 WebhookFilter。