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

Bitbucket Webhook 事件

您可以使用 Webhook 筛选条件组来指定哪个 Bitbucket Webhook 事件触发构建。例如,您可以指定仅为指定的分支触发构建。

您可以指定多个 Webhook 筛选条件组。如果一个或多个筛选条件组上的筛选条件评估为 True,则会触发构建。创建筛选条件组时,应指定:

事件

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

  • PUSH

  • PULL_REQUEST_CREATED

  • PULL_REQUEST_UPDATED

  • PULL_REQUEST_MERGED

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

注意

如果您创建使用 PULL_REQUEST_MERGED 事件类型的 Webhook 筛选条件组,则必须在 Bitbucket Webhook 设置中启用 merged 事件。

X-Event-Key 标头值 Event type
repo:push PUSH
pullrequest:created PULL_REQUEST_CREATED
pullrequest:updated PULL_REQUEST_UPDATED
pullrequest:fulfilled PULL_REQUEST_MERGED

对于 PULL_REQUEST_MERGED,如果拉取请求与 squash 策略合并并且拉取请求分支已关闭,则原始拉取请求提交不再存在。在这种情况下,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 事件(控制台)

使用 AWS 管理控制台 筛选 Webhook 事件:

  1. 创建项目时,选择 Rebuild every time a code change is pushed to this repository (每次将代码更改推送到此存储库时都会重新生成)

  2. Event type (事件类型) 中,选择一个或多个事件。

  3. 要在事件触发构建时进行筛选,请在 Start a build under these conditions (在这些条件下启动构建) 下,添加一个或多个可选筛选条件。

  4. 要在未触发事件时进行筛选,请在 Start a build under these conditions (在这些条件下不启动构建) 下,添加一个或多个可选筛选条件。

  5. 选择 Add filter group (添加筛选条件组) 以添加另一个筛选条件组。

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

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

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

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

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

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

在此示例中,仅当名称与正则表达式 ^buildspec.* 匹配的文件发生更改时,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 事件(开发工具包)

要使用 AWS CodeBuild 开发工具包筛选 Webhook 事件,请使用 CreateWebhookUpdateWebhook API 方法的请求语法中的 filterGroups 字段。有关更多信息,请参阅 CodeBuild API 参考 中的 WebhookFilter

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

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

要创建仅针对指定分支触发构建的 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" }, { "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" }, { "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" }, { "type": "ACTOR_ACCOUNT_ID", "pattern": "actor-account-id" } ] ]

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

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

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

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

筛选 Bitbucket Webhook 事件 (AWS CloudFormation)

要使用 AWS CloudFormation 模板来筛选 Webhook 事件,请使用 AWS CodeBuild 项目的 FilterGroups 属性。AWS 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:4.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: EVENT Pattern: PUSH - Type: COMMIT_MESSAGE - Pattern: \[CodeBuild\]