Bitbucket Webhook 事件 - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Bitbucket Webhook 事件

您可以使用 Webhook 筛选条件组来指定哪个 Bitbucket Webhook 事件触发构建。例如,您可以指定仅在对特定分支做出更改时触发构建。

您可以创建一个或多个 Webhook 筛选条件组,来指定哪些 Webhook 事件触发构建。如果任何筛选条件组评估为 true(即组中的所有筛选条件都评估为 true),则会触发构建。创建筛选条件组时,应指定:

事件

对于 Bitbucket,您可以选择以下一个或多个事件:

  • PUSH

  • PULL_REQUEST_CREATED

  • PULL_REQUEST_UPDATED

  • PULL_REQUEST_MERGED

  • PULL_REQUEST_CLOSED

webhook 的事件类型位于其在 X-Event-Key 字段中的标头中。下表显示了 X-Event-Key 标头值如何映射到事件类型。

注意

如果您创建使用 PULL_REQUEST_MERGED 事件类型的 Webhook 筛选条件组,则必须在 Bitbucket Webhook 设置中启用 merged 事件。如果您创建使用该declined事件类型的 Webhook 过滤器组,则还必须在 Bitbucket webhook 设置中启用该PULL_REQUEST_CLOSED事件。

X-Event-Key 标头值 事件类型
repo:push PUSH
pullrequest:created PULL_REQUEST_CREATED
pullrequest:updated PULL_REQUEST_UPDATED
pullrequest:fulfilled PULL_REQUEST_MERGED
pullrequest:rejected PULL_REQUEST_CLOSED

对于 PULL_REQUEST_MERGED,如果拉取请求与压缩策略合并且拉取请求分支已关闭,则原始的拉取请求提交将不再存在。在这种情况下,CODEBUILD_WEBHOOK_MERGE_COMMIT 环境变量包含压缩后的合并提交的标识符。

一个或多个可选筛选条件

使用正则表达式来指定筛选条件。对于触发构建的事件,组内与其关联的每个筛选条件都必须评估为 True。

ACTOR_ACCOUNT_ID(控制台中的 ACTOR_ID

当 Bitbucket 账户 ID 与正则表达式模式匹配时,Webhook 事件会触发构建。此值显示在 Webhook 筛选条件负载中的 actor 对象的 account_id 属性中。

HEAD_REF

当头部引用与正则表达式模式(例如 refs/heads/branch-namerefs/tags/tag-name)匹配时,Webhook 事件会触发构建。HEAD_REF 筛选条件将评估分支或标签的 Git 引用名称。分支或标签名称显示在 Webhook 负载的 push 对象中的 new 对象的 name 字段中。对于拉取请求事件,分支名称显示在 Webhook 负载中的 source 对象的 branch 中的 name 字段中。

BASE_REF

当基础引用与正则表达式模式匹配时,Webhook 事件会触发构建。BASE_REF 筛选条件仅处理拉取请求事件(例如,refs/heads/branch-name)。BASE_REF 筛选条件评估分支的 Git 引用名称。分支名称显示在 branch 对象的 name 字段中,该对象位于 Webhook 负载的 destination 对象中。

FILE_PATH

当更改的文件的路径与正则表达式模式匹配时,Webhook 会触发构建。

COMMIT_MESSAGE

当 HEAD 提交消息与正则表达式模式匹配时,Webhook 会触发构建操作。

注意

您可以在 Bitbucket 存储库的 webhook 设置中找到 webhook 负载。

筛选 Bitbucket Webhook 事件(控制台)

要使用 Amazon Web Services Management Console 来过滤 webhook 事件,请执行以下操作:

  1. 创建项目时,选择每次将代码更改推送到此存储库时都会重新构建

  2. 事件类型中,选择一个或多个事件。

  3. 要在事件触发构建时进行筛选,请在在这些条件下开始构建下,添加一个或多个可选筛选条件。

  4. 要在未触发事件时进行筛选,请在在这些条件下不开始构建下,添加一个或多个可选筛选条件。

  5. 选择添加筛选条件组以添加另一个筛选条件组。

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

在此示例中,Webhook 筛选条件组仅针对拉取请求触发构建:

以两个筛选条件组为例,当一个或两个筛选条件评估为 True 时触发构建:

  • 第一个筛选条件组使用与正则表达式 ^refs/heads/main$ 匹配的 Git 引用名称以及与 ^refs/heads/branch1! 匹配的 HEAD 引用,指定在分支上创建或更新的拉取请求。

  • 第二个筛选条件组使用与正则表达式 ^refs/heads/branch1$ 匹配的 Git 引用名称,指定分支上的推送请求。

在此示例中,Webhook 筛选条件组会针对除标记事件之外的所有请求触发构建。

在此示例中,仅当名称与正则表达式 ^buildspec.* 匹配的文件发生更改时,Webhook 筛选条件组才会触发构建。

在此示例中,仅当 srctest 文件夹中的文件发生更改时,Webhook 筛选条件组才会触发构建。

在此示例中,只有当其账户 ID 不与正则表达式 actor-account-id 匹配的 Bitbucket 用户进行更改时,Webhook 筛选条件组才会触发构建。

注意

有关如何查找您的 Bitbucket 账户 ID 的信息,请参阅 https://api.bitbucket.org/2.0/users/user-name,其中 user-name 是您的 Bitbucket 用户名。

在本示例中,当 HEAD 提交消息与正则表达式 \[CodeBuild\] 匹配时,Webhook 筛选条件组会触发推送事件的构建。

筛选 Bitbucket Webhook 事件(开发工具包)

要使用 Amazon CodeBuild SDK 筛选 webhook 事件,请使用CreateWebhookUpdateWebhook API 方法的请求语法中的filterGroups字段。有关更多信息,请参阅《CodeBuild API 参考》中的 WebhookFilter

要创建仅针对拉取请求触发构建的 Webhook 筛选条件,请在请求语法中插入以下内容:

"filterGroups": [ [ { "type": "EVENT", "pattern": "PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_MERGED, PULL_REQUEST_CLOSED" } ] ]

要创建仅针对指定分支触发构建的 Webhook 筛选条件,请使用 pattern 参数指定用于筛选分支名称的正则表达式。以两个筛选条件组为例,当一个或两个筛选条件评估为 True 时触发构建:

  • 第一个筛选条件组使用与正则表达式 ^refs/heads/main$ 匹配的 Git 引用名称以及与 ^refs/heads/myBranch$ 匹配的 HEAD 引用,指定在分支上创建或更新的拉取请求。

  • 第二个筛选条件组使用与正则表达式 ^refs/heads/myBranch$ 匹配的 Git 引用名称,指定分支上的推送请求。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_CLOSED" }, { "type": "HEAD_REF", "pattern": "^refs/heads/myBranch$" }, { "type": "BASE_REF", "pattern": "^refs/heads/main$" } ], [ { "type": "EVENT", "pattern": "PUSH" }, { "type": "HEAD_REF", "pattern": "^refs/heads/myBranch$" } ] ]

您可以使用 excludeMatchedPattern 参数指定不触发构建的事件。在此示例中,将针对除标记事件之外的所有请求触发构建。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_MERGED, PULL_REQUEST_CLOSED" }, { "type": "HEAD_REF", "pattern": "^refs/tags/.*", "excludeMatchedPattern": true } ] ]

您可以创建仅在帐户 ID 为 actor-account-id 的 Bitbucket 用户进行更改时触发构建的筛选条件。

注意

有关如何查找您的 Bitbucket 账户 ID 的信息,请参阅 https://api.bitbucket.org/2.0/users/user-name,其中 user-name 是您的 Bitbucket 用户名。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PUSH, PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_MERGED, PULL_REQUEST_CLOSED" }, { "type": "ACTOR_ACCOUNT_ID", "pattern": "actor-account-id" } ] ]

您可以创建只有当名称与 pattern 参数中的正则表达式匹配的文件发生更改时,才触发构建的筛选条件。在此示例中,筛选条件组指定仅当名称与正则表达式 ^buildspec.* 匹配的文件更改时才触发构建。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PUSH" }, { "type": "FILE_PATH", "pattern": "^buildspec.*" } ] ]

在此示例中,筛选条件组指定仅当 srctest 文件夹中的文件发生更改时,才会触发构建。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PUSH" }, { "type": "FILE_PATH", "pattern": "^src/.+|^test/.+" } ] ]

您可以创建一个筛选条件,仅当 HEAD 提交消息与模式参数中的正则表达式匹配时才触发构建操作。在本示例中,筛选条件组指定仅当推送事件的 HEAD 提交消息与正则表达式 \[CodeBuild\] 匹配时,才触发构建操作。

"filterGroups": [ [ { "type": "EVENT", "pattern": "PUSH" }, { "type": "COMMIT_MESSAGE", "pattern": "\[CodeBuild\]" } ] ]

筛选 Bitbucket Webhook 事件 (Amazon CloudFormation)

要使用 Amazon CloudFormation 模板过滤 webhook 事件,请使用 Amazon CodeBuild 项目的FilterGroups属性。 Amazon CloudFormation 模板的以下 YAML 格式的部分创建两个筛选条件组。当这两个筛选条件的其中一个或两个评估为 True 时触发构建:

  • 第一个筛选条件组使用与正则表达式 ^refs/heads/main$ 匹配的 Git 引用名称,指定由账户 ID 不为 12345 的 Bitbucket 用户在分支上创建或更新的拉取请求。

  • 第二个筛选条件组使用与正则表达式 ^refs/heads/.* 匹配的 Git 引用名称,指定在分支上创建的推送请求。

  • 第三个筛选条件组指定一个推送请求,其中包含与正则表达式 \[CodeBuild\] 匹配的 HEAD 提交消息。

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 - Type: ACTOR_ACCOUNT_ID Pattern: 12345 ExcludeMatchedPattern: true - - Type: EVENT Pattern: PUSH - Type: HEAD_REF Pattern: ^refs/heads/.* - Type: FILE_PATH Pattern: READ_ME ExcludeMatchedPattern: true - - Type: EVENT Pattern: PUSH - Type: COMMIT_MESSAGE Pattern: \[CodeBuild\] - Type: FILE_PATH Pattern: ^src/.+|^test/.+