AWS CodeBuild
用户指南 (API 版本 2016-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

CodeBuild 的 Bitbucket 拉取请求和 Webhook 筛选示例

此示例向您演示如何使用 Bitbucket 存储库创建拉取请求。它还向您演示如何使用 Bitbucket Webhook 来触发 CodeBuild 创建一个项目的生成。

Bitbucket 拉取请求先决条件

要运行此示例,您必须将 AWS CodeBuild 项目与您的 Bitbucket 账户相连接。

注意

CodeBuild 通过 Bitbucket 更新了其权限。如果您以前已将项目连接到 Bitbucket 但现在收到 Bitbucket 连接错误,您必须重新连接以授予 CodeBuild 权限来管理您的 Webhook。

创建将 Bitbucket 作为源存储库的生成项目并启用 Webhook

以下步骤介绍如何创建一个 AWS CodeBuild 项目,使用 Bitbucket 作为源存储库并启用 Webhook。

  1. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  2. 如果显示 CodeBuild 信息页面,请选择 Create build project (创建构建项目)。否则,请在导航窗格上展开 Build (构建),然后依次选择 Build projects (构建项目)Create build project (创建构建项目)

  3. Create build project (创建构建项目) 页面上的 Project configuration (项目配置) 中,对于 Project name (项目名称),输入此构建项目的名称。构建项目名称在您的各个 AWS 账户内必须是唯一的。您也可以包含构建项目的可选描述来帮助其他用户了解此项目的用途。

  4. Source (源) 中,对于 Source provider (源提供商),选择 Bitbucket

    按照说明进行连接或重新连接,然后选择 Grant access (授予访问权限)

    注意

    CodeBuild 不支持 Bitbucket 服务器。

  5. 选择 Use a repository in my account (在我的账户中使用存储库)。如果您使用公有 Bitbucket 存储库,则无法使用 Webhook。

  6. Primary source webhook events (主要源 Webhook 事件) 中,选择 Rebuild every time a code change is pushed to this repository (每次将代码更改推送到此存储库时都会重新生成)。仅当您已选择 Repository in my Bitbucket account (我的 Bitbucket 账户中的存储库) 时才选中此复选框。

    注意

    如果由 Bitbucket Webhook 触发了构建,则将忽略 Report build status (报告生成状态) 设置。生成状态始终发送到 Bitbucket。

  7. 选择项目的其他设置。有关源提供商选项和设置的更多信息,请参阅选择源提供商

  8. 选择 Create build project (创建构建项目)。在 Review (审核) 页面上,选择 Start build (启动构建) 以运行构建。

使用 Bitbucket Webhook 触发构建

对于使用 Bitbucket Webhook 的项目,AWS CodeBuild 在 Bitbucket 存储库检测到源代码中的更改时创建构建。

  1. Open the AWS CodeBuild console at https://console.amazonaws.cn/codesuite/codebuild/home.

  2. 在导航窗格上,选择 Build projects (生成项目),然后选择项目以与 Bitbucket 存储库和 Webhook 关联。有关创建 Bitbucket Webhook 项目的更多信息,请参阅 创建将 Bitbucket 作为源存储库的生成项目并启用 Webhook

  3. 在您项目的 Bitbucket 存储库中更改一些代码。

  4. 在 Bitbucket 存储库上创建拉取请求。有关更多信息,请参阅发出拉取请求

  5. 在 Bitbucket Webhook 页面上,选择 View request (查看请求) 以查看最新事件的列表。

  6. 选择 View details (查看详细信息) 以查看 CodeBuild 返回的响应的详细信息。其内容如下所示:

    "response":"Webhook received and buld started: https://us-east-1.console.aws.amazon.com/codebuild/home..." "statusCode":200
  7. 导航到 Bitbucket 拉取请求页面以查看构建的状态。

筛选 Bitbucket Webhook 事件

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

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

  • 事件。对于 Bitbucket,您可以选择以下一个或多个事件:PUSHPULL_REQUEST_CREATEDPULL_REQUEST_UPDATEDPULL_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
  • 一个或多个可选筛选条件。使用正则表达式来指定筛选条件。对于触发构建的事件,与其关联的每个筛选条件都必须评估为 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 引用名称。分支名称在 Webhook 负载中的 destination 对象中的 branch 对象中的 name 字段中。

注意

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

筛选 Bitbucket Webhook 事件(控制台)

使用 AWS Management Console 筛选 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 (添加筛选条件组) 以添加另一个筛选条件组。

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

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

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

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

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

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

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

注意

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

筛选 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/master$ 匹配的 Git 引用名称以及与 ^refs/heads/myBranch$ 匹配的头部引用,指定在分支上创建或更新的拉取请求。

  • 第二个筛选条件组使用与正则表达式 ^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/master$" } ], [ { "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" } ] ]

筛选 Bitbucket Webhook 事件 (AWS CloudFormation)

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

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

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

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:2.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/master$ ExcludeMatchedPattern: false - Type: ACTOR_ACCOUNT_ID Pattern: 12345 ExcludeMatchedPattern: true - - Type: EVENT Pattern: PUSH - Type: HEAD_REF Pattern: ^refs/heads/.*