

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 使用 Webhook AWS CodeBuild
<a name="webhooks"></a>

AWS CodeBuild 支援與 GitHub、GitHub Enterprise Server、GitLab、GitLab Self Managed 和 Bitbucket 的 Webhook 整合。

**Topics**
+ [

## 搭配 使用 Webhook 的最佳實務 AWS CodeBuild
](#webhook-best-practices)
+ [

# Bitbucket Webhook 事件
](bitbucket-webhook.md)
+ [

# GitHub 全域和組織 Webhook
](github-global-organization-webhook.md)
+ [

# GitHub 手動 Webhook
](github-manual-webhook.md)
+ [

# GitHub Webhook 事件
](github-webhook.md)
+ [

# GitLab 群組 Webhook
](gitlab-group-webhook.md)
+ [

# GitLab 手動 Webhook
](gitlab-manual-webhook.md)
+ [

# GitLab Webhook 事件
](gitlab-webhook.md)
+ [

# Buildkite 手動 Webhook
](buildkite-manual-webhook.md)
+ [

# 提取請求評論核准
](pull-request-build-policy.md)

## 搭配 使用 Webhook 的最佳實務 AWS CodeBuild
<a name="webhook-best-practices"></a>

對於使用公有儲存庫來設定 Webhook 的專案，我們建議下列選項：

設定`ACTOR_ACCOUNT_ID`篩選條件  
將`ACTOR_ACCOUNT_ID`篩選條件新增至專案的 Webhook 篩選條件群組，以指定哪些使用者可以觸發組建。交付至 CodeBuild 的每個 Webhook 事件都會隨附寄件者資訊，以指定演員的識別符。CodeBuild 會根據篩選條件中提供的規則表達式模式來篩選 Webhook。您可以使用此篩選條件指定允許觸發組建的特定使用者。如需詳細資訊，請參閱[GitHub Webhook 事件](github-webhook.md)及[Bitbucket Webhook 事件](bitbucket-webhook.md)。

設定`FILE_PATH`篩選條件  
將`FILE_PATH`篩選條件新增至專案的 Webhook 篩選條件群組，以包含或排除可在變更時觸發組建的檔案。例如，您可以使用規則表達式模式，例如 以及 `excludeMatchedPattern` 屬性`^buildspec.yml$`，拒絕`buildspec.yml`檔案變更的建置請求。如需詳細資訊，請參閱[GitHub Webhook 事件](github-webhook.md)及[Bitbucket Webhook 事件](bitbucket-webhook.md)。

縮小建置 IAM 角色的許可範圍  
Webhook 觸發的組建會使用專案中指定的 IAM 服務角色。我們建議將服務角色中的許可設定為執行建置所需的最低許可集。例如，在測試和部署案例中，建立一個專案用於測試，另一個專案用於部署。測試專案接受來自 儲存庫的 Webhook 組建，但不會對您的 資源提供寫入許可。部署專案會為您的 資源提供寫入許可，而 Webhook 篩選條件已設定為僅允許信任的使用者觸發組建。

使用內嵌或 Amazon S3 儲存的 buildspec  
如果您在專案本身中內嵌定義 buildspec，或將 buildspec 檔案存放在 Amazon S3 儲存貯體中，則只有專案擁有者可以看到 buildspec 檔案。這可防止提取請求對 buildspec 檔案進行程式碼變更，並觸發不需要的組建。如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [ProjectSource.buildspec](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectSource.html#CodeBuild-Type-ProjectSource-buildspec)。

# Bitbucket Webhook 事件
<a name="bitbucket-webhook"></a>

您可以使用 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`事件。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/bitbucket-webhook.html)
對於 `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-name`和 ) 時，Webhook 事件會觸發組建`refs/tags/tag-name`。`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` 欄位中。  
`FILE_PATH`  
當變更的檔案路徑符合規則表達式模式時，Webhook 會觸發組建。  
`COMMIT_MESSAGE`  
當前端遞交訊息符合規則表達式模式時，Webhook 會觸發組建。  
`WORKFLOW_NAME`  
當工作流程名稱符合規則表達式模式時，Webhook 會觸發組建。

**注意**  
您可以在 Bitbucket 儲存庫的 Webhook 設定中找到 Webhook 承載。

**Topics**
+ [

# 篩選 Bitbucket Webhook 事件 (主控台)
](bitbucket-webhook-events-console.md)
+ [

# 篩選 Bitbucket Webhook 事件 (開發套件)
](bitbucket-webhook-events-sdk.md)
+ [

# 篩選 Bitbucket Webhook 事件 (CloudFormation)
](bitbucket-webhook-events-cfn.md)

# 篩選 Bitbucket Webhook 事件 (主控台)
<a name="bitbucket-webhook-events-console"></a>

 若要使用 AWS 管理主控台 篩選 Webhook 事件：

1.  當您建立專案時，請選取 **Rebuild every time a code change is pushed to this repository (在每次將程式碼變更推送至此儲存庫時重建)**。

1.  從 **Event type (事件類型)**，選擇一或多個事件。

1.  若要篩選事件觸發組建的時間，請在 **Start a build under these conditions (在這些情況下開始組建)** 下新增一或多個選用的篩選條件。

1.  若要篩選何時不觸發事件，請在 **Don't start a build under these conditions (在這些情況下不開始組建)** 下新增一或多個選用的篩選條件。

1.  選擇 **Add filter group (新增篩選群組)** 新增另一個篩選群組。

 如需詳細資訊，請參閱《 *AWS CodeBuild API 參考*》中的 [建立組建專案 (主控台)](create-project.md#create-project-console)和 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

在這個範例中，Webhook 篩選群組僅針對提取請求觸發組建：

![\[僅針對提取請求觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-bitbucket.png)


在有兩個篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/branch1!`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/branch1$`。

![\[兩個篩選群組的範例。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-head-base-regexes-bitbucket.png)


在這個範例中，Webhook 篩選群組針對所有請求 (標籤事件除外) 觸發組建。

![\[Webhook 篩選條件群組，可針對標籤事件以外的所有請求觸發組建。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-exclude-bitbucket.png)


在這個範例中，只有在檔案名稱符合規則表達式 `^buildspec.*` 的檔案變更時，Webhook 篩選群組才會觸發組建。

![\[只有當檔案的名稱符合指定的規則表達式時，才會觸發組建的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-regex.png)


在此範例中，Webhook 篩選群組只會在 `src`或 `test` 資料夾中變更檔案時觸發組建。

![\[只有在指定資料夾中變更檔案時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-combined-regex.png)


在這個範例中，只有當 Bitbucket 使用者進行變更，而且其帳戶 ID 不符合規則表達式 `actor-account-id` 時，Webhook 篩選群組才會觸發建置。

**注意**  
 有關如何尋找您的 Bitbucket 帳戶 ID 的資訊，請參閱 https://api.bitbucket.org/2.0/users/*user-name*，其中 *user-name* 是您的 Bitbucket 使用者名稱。

![\[只有當 Bitbucket 使用者變更沒有帳戶 ID 時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-actor-bitbucket.png)


在此範例中，當 head 提交訊息符合規則運算式 `\[CodeBuild\]` 時，webhook 篩選群組會觸發推送事件的建置。

![\[當前端遞交訊息符合規則表達式時，觸發推送事件建置的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-commit-message.png)


# 篩選 Bitbucket Webhook 事件 (開發套件)
<a name="bitbucket-webhook-events-sdk"></a>

 若要使用 AWS CodeBuild SDK 篩選 Webhook 事件，請使用 `CreateWebhook`或 `UpdateWebhook` API 方法請求語法中的 `filterGroups` 欄位。如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

 若要建立 Webhook 篩選條件來只針對提取請求觸發組建，請在請求語法插入以下程式碼：

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

 若要建立 Webhook 篩選條件來只針對指定的分支觸發組建，請使用 `pattern` 參數指定規則表達式來篩選分支名稱。在有兩個篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/myBranch$`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/myBranch$`。

```
"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.*"
    }
  ]
]
```

在此範例中，篩選條件群組指定只有在 `src`或 `test` 資料夾中變更檔案時，才會觸發組建。

```
"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 事件 (CloudFormation)
<a name="bitbucket-webhook-events-cfn"></a>

 若要使用 CloudFormation 範本篩選 Webhook 事件，請使用 AWS CodeBuild 專案的 `FilterGroups` 屬性。在 CloudFormation 範本中，以下 YAML 格式的部分建立兩個篩選群組。當其中一個或兩個評估為 true 時，它們會一起觸發組建：
+  第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而且是由帳戶 ID 不是 `12345` 的 Bitbucket 使用者所建立或更新。
+  第二個篩選群組指定分支上建立的推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/.*`。
+ 第三個篩選群組會指定其 head 提交訊息符合規則運算式 `\[CodeBuild\]` 的推送請求。

```
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/.+
```

# GitHub 全域和組織 Webhook
<a name="github-global-organization-webhook"></a>

您可以使用 CodeBuild GitHub 全域或組織 Webhook，從 GitHub 組織或企業內的任何儲存庫開始建置 Webhook 事件。全域和組織 Webhook 可與任何現有的 GitHub Webhook 事件類型搭配使用，而且可以在建立 CodeBuild Webhook 時新增範圍組態來設定。您也可以使用全域和組織 Webhook 在 [ CodeBuild 中設定自我託管的 GitHub 動作執行器](action-runner.md)，以便在單一專案中接收來自多個儲存庫`WORKFLOW_JOB_QUEUED`的事件。

**Topics**
+ [

# 設定全域或組織 GitHub Webhook
](github-global-organization-webhook-setup.md)
+ [

# 篩選 GitHub 全域或組織 Webhook 事件 （主控台）
](github-global-organization-webhook-events-console.md)
+ [

# 篩選 GitHub 組織 Webhook 事件 (CloudFormation)
](github-organization-webhook-events-cfn.md)

# 設定全域或組織 GitHub Webhook
<a name="github-global-organization-webhook-setup"></a>

設定全域或組織 GitHub Webhook 的高階步驟如下所示。如需全域和組織 GitHub Webhook 的詳細資訊，請參閱 [GitHub 全域和組織 Webhook](github-global-organization-webhook.md)。

1. 將專案的來源位置設定為 `CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION`。

1. 在 Webhook 的範圍組態中，將範圍設定為 `GITHUB_ORGANIZATION`或 `GITHUB_GLOBAL`，取決於該範圍是組織還是[全域 Webhook](https://docs.github.com/en/enterprise-cloud@latest/admin/monitoring-activity-in-your-enterprise/exploring-user-activity-in-your-enterprise/managing-global-webhooks)。如需詳細資訊，請參閱 [ Webhook 的類型](https://docs.github.com/en/webhooks/types-of-webhooks)。

1. 指定名稱做為 Webhook 範圍組態的一部分。對於組織 Webhook，這是組織名稱，而對於全域 Webhook，這是企業名稱。
**注意**  
如果專案的來源類型為 `GITHUB_ENTERPRISE`，您也需要指定網域做為 Webhook 範圍組態的一部分。

1. （選用） 如果您只想要接收組織或企業內特定儲存庫的 Webhook 事件，您可以在建立 Webhook 時指定 `REPOSITORY_NAME`做為篩選條件。

1. 如果您要建立組織 Webhook，請確保 CodeBuild 具有在 GitHub 中建立組織層級 Webhook 的許可。您可以建立具有組織 Webhook 許可的 GitHub 個人存取字符，或使用 CodeBuild OAuth。如需詳細資訊，請參閱[GitHub 和 GitHub Enterprise Server 存取權杖](access-tokens-github.md)。

   請注意，組織 Webhook 可與任何現有的 GitHub Webhook 事件類型搭配使用。

1. 如果您要建立全域 Webhook，則需要手動建立 Webhook。如需如何在 GitHub 中手動建立 Webhook 的詳細資訊，請參閱 [GitHub 手動 Webhook](github-manual-webhook.md)。

   請注意，全域 Webhook 僅支援 `WORKFLOW_JOB_QUEUED`事件類型。如需詳細資訊，請參閱[教學課程：設定 CodeBuild 託管的 GitHub 動作執行器](action-runner.md)。

# 篩選 GitHub 全域或組織 Webhook 事件 （主控台）
<a name="github-global-organization-webhook-events-console"></a>

透過主控台建立 GitHub 專案時，請選取下列選項，以在專案內建立 GitHub 全域或組織 Webhook。如需全域和組織 GitHub Webhook 的詳細資訊，請參閱 [GitHub 全域和組織 Webhook](github-global-organization-webhook.md)。

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 建立建置專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [執行建置 (主控台)](run-build-console.md)。
   +  在 **Source (來源)** 中：
     +  針對**來源提供者**，選擇 **GitHub** 或 **GitHub Enterprise**。
     +  針對**儲存庫**，選擇 **GitHub 範圍 Webhook**。

        GitHub 儲存庫會自動設定為 `CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION`，這是全域和組織 Webhook 所需的來源位置。
**注意**  
如果您使用的是組織 Webhook，請確定 CodeBuild 具有在 GitHub 中建立組織層級 Webhook 的許可。如果您使用的是[現有的 OAuth 連線](oauth-app-github.md)，您可能需要重新產生連線，才能授予 CodeBuild 此許可。或者，您可以使用 [CodeBuild 手動 Webhook 功能手動建立 Webhook](github-manual-webhook.md)。請注意，如果您有現有的 GitHub OAuth 權杖，並想要新增其他組織許可，您可以[撤銷 OAuth 權杖的許可](https://docs.github.com/en/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-oauth-apps)，並透過 CodeBuild 主控台重新連接權杖。  
![\[GitHub 範圍 Webhook 的組態。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-organization-webhook-source.png)
   +  在**主要來源 Webhook 事件**中：
     +  對於**範圍類型**，如果您要建立**組織** Webhook，請選擇組織層級；如果您要建立全域 Webhook，請選擇**企業層級**。
     +  對於**名稱**，輸入企業或組織名稱，取決於 Webhook 是全域還是組織 Webhook。

       如果專案的來源類型為 `GITHUB_ENTERPRISE`，您也需要指定網域做為 Webhook 組織組態的一部分。例如，如果您組織的 URL 為 **https://domain.com/orgs/org-name**，則網域為 **https://domain.com**。
**注意**  
 建立 Webhook 之後，就無法變更此名稱。若要變更名稱，您可以刪除並重新建立 Webhook。如果您想要完全移除 Webhook，也可以將專案來源位置更新為 GitHub 儲存庫。  
![\[全域或組織 Webhook 的組態。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-organization-webhook-primary-events.png)
     +  （選用） 在 **Webhook 事件篩選條件群組**中，您可以指定[要觸發新組建的事件](github-webhook.md)。您也可以指定 `REPOSITORY_NAME`做為篩選條件，以僅觸發來自特定儲存庫的 Webhook 事件建置。  
![\[僅觸發來自特定儲存庫之 Webhook 事件建置的篩選條件。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-organization-webhook-filter-groups.png)

       您也可以將事件類型設定為 `WORKFLOW_JOB_QUEUED`，以設定自我託管的 GitHub 動作執行器。如需詳細資訊，請參閱[教學課程：設定 CodeBuild 託管的 GitHub 動作執行器](action-runner.md)。

1. 繼續執行預設值，然後選擇**建立建置專案**。

# 篩選 GitHub 組織 Webhook 事件 (CloudFormation)
<a name="github-organization-webhook-events-cfn"></a>

 若要使用 CloudFormation 範本篩選組織 Webhook AWS CodeBuild 事件，請使用專案的 `ScopeConfiguration` 屬性。如需全域和組織 GitHub Webhook 的詳細資訊，請參閱 [GitHub 全域和組織 Webhook](github-global-organization-webhook.md)。

**注意**  
不支援全域 Webhook 和 GitHub Enterprise Webhook CloudFormation。

 範本的下列 YAML 格式部分 CloudFormation 會建立四個篩選群組。當一個或全部評估為 true 時，它們會一起觸發組建：
+  第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而且是由帳戶 ID 不是 `12345` 的 GitHub 使用者所建立或更新。
+  第二個篩選群組指定在分支中的檔案上建立的推送請求，並且這些檔案的名稱符合規則表達式 `READ_ME`，而分支的 Git 參考名稱符合規則表達式 `^refs/heads/.*`。
+ 第三個篩選群組會指定其 head 提交訊息符合規則運算式 `\[CodeBuild\]` 的推送請求。
+ 第四個篩選條件群組會指定工作流程名稱符合規則表達式 的 GitHub Actions 工作流程任務請求`\[CI-CodeBuild\]`。

```
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: GITHUB
      Location: source-location
    Triggers:
      Webhook: true
      ScopeConfiguration:
        Name: organization-name
        Scope: GITHUB_ORGANIZATION
      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/.+
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

# GitHub 手動 Webhook
<a name="github-manual-webhook"></a>

您可以設定手動 GitHub Webhook，以防止 CodeBuild 自動嘗試在 GitHub 中建立 Webhook。CodeBuild 會在呼叫中傳回承載 URL，以建立 Webhook，並可用於在 GitHub 中手動建立 Webhook。即使 CodeBuild 不允許在 GitHub 帳戶中建立 Webhook，您仍然可以手動為建置專案建立 Webhook。

使用下列程序來建立 GitHub 手動 Webhook。

**建立 GitHub 手動 Webhook**

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 建立建置專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [執行建置 (主控台)](run-build-console.md)。
   +  在 **Source (來源)** 中：
     +  針對 **Source provider (來源供應商)**，選擇 **GitHub**。
     +  在**儲存庫**中，選擇 ** GitHub 帳戶中的儲存庫**。
     +  針對 **Repository URL (儲存庫 URL)**，輸入 **https://github.com/*user-name*/*repository-name***。
   +  在**主要來源 Webhook 事件**中：
     +  對於 **Webhook - 選用**，**每次將程式碼變更推送至此儲存庫時，請選擇重建**。
     +  選擇**其他組態**，並針對**手動建立 - 選用**，選擇**在 GitHub 主控台中手動為此儲存庫建立 Webhook。**

1. 繼續執行預設值，然後選擇**建立建置專案**。請記下**承載 URL** 和**秘密**值，因為您稍後會使用這些值。  
![\[手動 Webhook 的承載 URL 和秘密組態。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-manual-webhook-values.png)

1. 在 開啟 GitHub 主控台`https://github.com/user-name/repository-name/settings/hooks`，然後選擇**新增 Webhook**。
   + 針對**承載 URL**，輸入您先前記下的承載 URL 值。
   + 針對**內容類型**，選擇**應用程式/json**。
   + 針對**機密**，輸入您先前記下的機密值。
   + 設定將 Webhook 承載傳送至 CodeBuild 的個別事件。對於**您要觸發此 Webhook 的事件有哪些？**，請選擇**讓我選取個別事件**，然後從下列事件中選擇：**推送**、**提取請求**和**發行**。如果您想要為`WORKFLOW_JOB_QUEUED`事件開始組建，請選擇**工作流程任務**。若要進一步了解 GitHub Actions 執行器，請參閱 [教學課程：設定 CodeBuild 託管的 GitHub 動作執行器](action-runner.md)。若要進一步了解 CodeBuild 支援的事件類型，請參閱 [GitHub Webhook 事件](github-webhook.md)。

1. 選擇**新增 Webhook**。

# GitHub Webhook 事件
<a name="github-webhook"></a>

您可以使用 Webhook 篩選群組來指定哪些 GitHub Webhook 事件會觸發組建。例如，您可以指定僅針對特定分支的變更觸發組建。

您可以建立一或多個 Webhook 篩選條件群組，以指定哪些 Webhook 事件觸發組建。如果任何篩選條件群組評估為 true，則會觸發組建，這會在群組中的所有篩選條件評估為 true 時發生。當您建立篩選條件群組時，您可以指定：

**事件**  
對於 GitHub，您可以選擇下列一或多個事件：`PUSH`、`PULL_REQUEST_CREATED`、`PULL_REQUEST_UPDATED`、`PULL_REQUEST_REOPENED`、`PULL_REQUEST_MERGED`、`PULL_REQUEST_CLOSED``RELEASED`、 `PRERELEASED`和 `WORKFLOW_JOB_QUEUED`。Webhook 事件類型位在 Webhook 承載的 `X-GitHub-Event` 標頭中。在 `X-GitHub-Event` 標頭中，您可能會看到 `pull_request` 或 `push`。若為提取請求事件，類型位在 Webhook 事件承載的 `action` 欄位中。下表顯示 `X-GitHub-Event` 標頭值和 Webhook 提取請求承載 `action` 欄位值如何映射到可用的事件類型。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/github-webhook.html)
 `PULL_REQUEST_REOPENED` 事件類型僅能搭配 GitHub 和 GitHub Enterprise Server 使用。`RELEASED` 和 `PRERELEASED`事件類型只能與 GitHub 搭配使用。如需 `WORKFLOW_JOB_QUEUED` 的詳細資訊，請參閱[教學課程：設定 CodeBuild 託管的 GitHub 動作執行器](action-runner.md)。

**一或多個選用篩選條件**  
使用規則表達式來指定篩選條件。若要讓事件觸發組建，與其相關聯的群組中的每個篩選條件都必須評估為 true。    
`ACTOR_ACCOUNT_ID` (`ACTOR_ID` 主控台中的 )  
當 GitHub 或 GitHub Enterprise Server 帳戶 ID 符合規則表達式模式時，Webhook 事件會觸發組建。此值位於 Webhook 承載之 `sender` 物件的 `id` 屬性中。  
`HEAD_REF`  
當頭部參考符合規則表達式模式 （例如， `refs/heads/branch-name`或 ) 時，Webhook 事件會觸發組建`refs/tags/tag-name`。若為推送事件，參考名稱位在 Webhook 承載的 `ref` 屬性中。若為提取請求事件，分支名稱位在 Webhook 承載之 `head` 物件的 `ref` 屬性中。  
`BASE_REF`  
當基本參考符合規則表達式模式 （例如，) 時，Webhook 事件會觸發組建`refs/heads/branch-name`。`BASE_REF` 篩選條件僅可搭配提取請求事件使用。分支名稱位在 Webhook 承載之 `base` 物件的 `ref` 屬性中。  
`FILE_PATH`  
當變更的檔案路徑符合規則表達式模式時，Webhook 會觸發組建。`FILE_PATH` 篩選條件可以用於 GitHub 推送和提取請求事件和 GitHub Enterprise Server 推送事件。它不能與 GitHub Enterprise Server 提取請求事件一起使用。  
`COMMIT_MESSAGE`  
當前端遞交訊息符合規則表達式模式時，Webhook 會觸發組建。`COMMIT_MESSAGE` 篩選條件可以用於 GitHub 推送和提取請求事件和 GitHub Enterprise Server 推送事件。它不能與 GitHub Enterprise Server 提取請求事件一起使用。  
`TAG_NAME`  
當版本的標籤名稱符合規則表達式模式時，Webhook 會觸發組建。`TAG_NAME` 篩選條件可與 GitHub 發行和預先發行的請求事件搭配使用。  
`RELEASE_NAME`  
當版本名稱符合規則表達式模式時，Webhook 會觸發組建。`RELEASE_NAME` 篩選條件可與 GitHub 發行和預先發行的請求事件搭配使用。  
`REPOSITORY_NAME`  
當儲存庫名稱符合規則表達式模式時，Webhook 會觸發組建。`REPOSITORY_NAME` 篩選條件只能與 GitHub 全域或組織 Webhook 搭配使用。  
`ORGANIZATION_NAME`  
當組織名稱符合規則表達式模式時，Webhook 會觸發組建。`ORGANIZATION_NAME` 篩選條件只能與 GitHub 全域 Webhook 搭配使用。  
`WORKFLOW_NAME`  
當工作流程名稱符合規則表達式模式時，Webhook 會觸發組建。`WORKFLOW_NAME` 篩選條件可與 GitHub Actions 工作流程任務佇列請求事件搭配使用。

**注意**  
您可以在您 GitHub 儲存庫的 Webhook 設定中找到 Webhook 承載。

**Topics**
+ [

# 篩選 GitHub Webhook 事件 (主控台)
](github-webhook-events-console.md)
+ [

# 篩選 GitHub Webhook 事件 (開發套件)
](github-webhook-events-sdk.md)
+ [

# 篩選 GitHub Webhook 事件 (CloudFormation)
](github-webhook-events-cfn.md)

# 篩選 GitHub Webhook 事件 (主控台)
<a name="github-webhook-events-console"></a>

使用以下指示，使用 篩選 GitHub Webhook 事件 AWS 管理主控台。如需 GitHub Webhook 事件的詳細資訊，請參閱 [GitHub Webhook 事件](github-webhook.md)。

在**主要來源 Webhook 事件**中，選取下列項目。只有當您在**我的 GitHub 帳戶中為來源儲存庫**選擇儲存庫時，才能使用本節。

1. 當您建立專案時，請選取 **Rebuild every time a code change is pushed to this repository (在每次將程式碼變更推送至此儲存庫時重建)**。

1. 從 **Event type (事件類型)**，選擇一或多個事件。

1. 若要篩選事件觸發組建的時間，請在 **Start a build under these conditions (在這些情況下開始組建)** 下新增一或多個選用的篩選條件。

1. 若要篩選何時不觸發事件，請在 **Don't start a build under these conditions (在這些情況下不開始組建)** 下新增一或多個選用的篩選條件。

1. 如有需要，請選擇**新增篩選條件群組**以新增另一個篩選條件群組。

 如需詳細資訊，請參閱《 *AWS CodeBuild API 參考*》中的 [建立組建專案 (主控台)](create-project.md#create-project-console)和 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

在這個範例中，Webhook 篩選群組僅針對提取請求觸發組建：

![\[僅針對提取請求觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter.png)


在有兩個 Webhook 篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立、更新或重新開啟的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/branch1$`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/branch1$`。

![\[兩個篩選群組的範例。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-head-base-regexes.png)


在這個範例中，Webhook 篩選群組針對所有請求 (標籤事件除外) 觸發組建。

![\[Webhook 篩選條件群組，可針對標籤事件以外的所有請求觸發組建。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-exclude.png)


在這個範例中，只有在檔案名稱符合規則表達式 `^buildspec.*` 的檔案變更時，Webhook 篩選群組才會觸發組建。

![\[只有當檔案的名稱符合指定的規則表達式時，才會觸發組建的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-regex.png)


在此範例中，Webhook 篩選群組只會在 `src`或 `test` 資料夾中變更檔案時觸發組建。

![\[只有在指定資料夾中變更檔案時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-combined-regex.png)


在這個範例中，只有當指定的 GitHub 或 GitHub Enterprise Server 使用者進行變更，而且其帳戶 ID 符合規則表達式 `actor-account-id` 時，Webhook 篩選群組才會觸發建置。

**注意**  
 有關如何尋找您的 GitHub 帳戶 ID 的資訊，請參閱 https://api.github.com/users/*user-name*，其中 *user-name* 是您的 GitHub 使用者名稱。

![\[只有當指定的 GitHub 使用者使用符合規則表達式的帳戶 ID 進行變更時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-actor.png)


在此範例中，當 head 提交訊息符合規則運算式 `\[CodeBuild\]` 時，webhook 篩選群組會觸發推送事件的建置。

![\[當前端遞交訊息符合規則表達式時，觸發推送事件建置的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-commit-message.png)


在此範例中，Webhook 篩選群組只會觸發 GitHub Actions 工作流程任務事件的組建。

**注意**  
CodeBuild 只有在 Webhook 具有包含 **WORKFLOW\$1JOB\$1QUEUED** 事件篩選條件的篩選條件群組時，才會處理 GitHub Actions 工作流程任務。

![\[Webhook 篩選群組只會觸發 GitHub Actions 工作流程任務事件的組建。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-actions-workflow-job-queued-no-highlight.png)


在此範例中，Webhook 篩選群組會為符合規則表達式 的工作流程名稱觸發組建`CI-CodeBuild`。

![\[Webhook 篩選條件群組會為符合規則表達式的工作流程名稱觸發組建。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-actions-workflow-job-specific.png)


# 篩選 GitHub Webhook 事件 (開發套件)
<a name="github-webhook-events-sdk"></a>

若要使用 AWS CodeBuild SDK 篩選 Webhook 事件，請使用 `CreateWebhook`或 `UpdateWebhook` API 方法請求語法中的 `filterGroups` 欄位。如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

如需 GitHub Webhook 事件的詳細資訊，請參閱 [GitHub Webhook 事件](github-webhook.md)。

 若要建立 Webhook 篩選條件來只針對提取請求觸發組建，請在請求語法插入以下程式碼：

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

 若要建立 Webhook 篩選條件來只針對指定的分支觸發組建，請使用 `pattern` 參數指定規則表達式來篩選分支名稱。在有兩個篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立、更新或重新開啟的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/myBranch$`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/myBranch$`。

```
"filterGroups": [
    [
        {
            "type": "EVENT", 
            "pattern": "PULL_REQUEST_CREATED, PULL_REQUEST_UPDATED, PULL_REQUEST_REOPENED"
        },
        {
            "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_REOPENED, PULL_REQUEST_MERGED, PULL_REQUEST_CLOSED"
        },
        {
            "type": "HEAD_REF", 
            "pattern": "^refs/tags/.*", 
            "excludeMatchedPattern": true
        }
    ]
]
```

您可以建立篩選條件來指定只有在檔案名稱符合 `pattern` 引數中的規則表達式的檔案變更時，才觸發組建。在這個範例中，篩選群組指定只有在檔案名稱符合規則表達式 `^buildspec.*` 的檔案變更時，才觸發組建。

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

在此範例中，篩選條件群組指定只有在 `src`或 `test` 資料夾中變更檔案時，才會觸發組建。

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

您可以建立篩選條件來指定只有在指定的 GitHub 或 GitHub Enterprise Server 使用者進行變更，並且其帳戶 ID 為 `actor-account-id` 時，才觸發組建。

**注意**  
 有關如何尋找您的 GitHub 帳戶 ID 的資訊，請參閱 https://api.github.com/users/*user-name*，其中 *user-name* 是您的 GitHub 使用者名稱。

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

您可以建立篩選條件，只有在 head 提交訊息符合模式引數中的規則運算式時，才觸發組建。在這個範例中，篩選群組指定只有在推送事件的 head 遞交訊息符合規則表達式 `\[CodeBuild\]` 時，才觸發組建。

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

若要建立僅觸發 GitHub 動作工作流程任務建置的 Webhook 篩選條件，請將以下內容插入請求語法中：

```
"filterGroups": [
   [
        {
            "type": "EVENT", 
            "pattern": "WORKFLOW_JOB_QUEUED"
        }
    ]
]
```

# 篩選 GitHub Webhook 事件 (CloudFormation)
<a name="github-webhook-events-cfn"></a>

 若要使用 CloudFormation 範本篩選 Webhook 事件，請使用 AWS CodeBuild 專案的 `FilterGroups` 屬性。

如需 GitHub Webhook 事件的詳細資訊，請參閱 [GitHub Webhook 事件](github-webhook.md)。

在 CloudFormation 範本中，以下 YAML 格式的部分建立兩個篩選群組。當其中一個或兩個評估為 true 時，它們會一起觸發組建：
+  第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而且是由帳戶 ID 不是 `12345` 的 GitHub 使用者所建立或更新。
+  第二個篩選群組指定在分支中的檔案上建立的推送請求，並且這些檔案的名稱符合規則表達式 `READ_ME`，而分支的 Git 參考名稱符合規則表達式 `^refs/heads/.*`。
+ 第三個篩選群組會指定其 head 提交訊息符合規則運算式 `\[CodeBuild\]` 的推送請求。
+ 第四個篩選條件群組會指定工作流程名稱符合規則表達式 的 GitHub Actions 工作流程任務請求`\[CI-CodeBuild\]`。

```
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: GITHUB
      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/.+
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

# GitLab 群組 Webhook
<a name="gitlab-group-webhook"></a>

您可以使用 CodeBuild GitLab 群組 Webhook，從 GitLab 群組中的任何儲存庫開始建置 Webhook 事件。群組 Webhook 可與任何現有的 GitLab Webhook 事件類型搭配使用，而且可以在建立 CodeBuild Webhook 時新增範圍組態來設定。您也可以使用群組 Webhook 在 [ CodeBuild 中設定自我託管 GitLab 執行器](gitlab-runner.md)，以便在單一專案中接收來自多個儲存庫`WORKFLOW_JOB_QUEUED`的事件。

**Topics**
+ [

# 設定群組 GitLab Webhook
](gitlab-group-webhook-setup.md)
+ [

# 篩選 GitLab 群組 Webhook 事件 （主控台）
](gitlab-group-webhook-events-console.md)
+ [

# 篩選 GitLab 群組 Webhook 事件 (CloudFormation)
](gitlab-group-webhook-events-cfn.md)

# 設定群組 GitLab Webhook
<a name="gitlab-group-webhook-setup"></a>

設定群組 GitLab Webhook 的高階步驟如下所示。如需群組 GitLab Webhook 的詳細資訊，請參閱 [GitLab 群組 Webhook](gitlab-group-webhook.md)。

1. 將專案的來源位置設定為 `CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION`。

1. 在 Webhook 的範圍組態中，將範圍設定為 `GITLAB_GROUP`。

1. 指定名稱做為 Webhook 範圍組態的一部分。對於群組 Webhook，這是群組名稱。
**注意**  
如果專案的來源類型為 `GITLAB_SELF_MANAGED`，您也需要指定網域做為 Webhook 範圍組態的一部分。

1. （選用） 如果您只想要接收組織或企業內特定儲存庫的 Webhook 事件，您可以在建立 Webhook 時指定 `REPOSITORY_NAME`做為篩選條件。

1. 建立群組 Webhook 時，請確定 CodeBuild 具有在 GitLab 中建立群組層級 Webhook 的許可。若要這樣做，您可以透過 CodeConnections 使用 CodeBuild OAuth。 CodeConnections 如需詳細資訊，請參閱[CodeBuild 中的 GitLab 存取](access-tokens-gitlab-overview.md)。

   請注意，群組 Webhook 可與任何現有的 GitLab Webhook 事件類型搭配使用。

# 篩選 GitLab 群組 Webhook 事件 （主控台）
<a name="gitlab-group-webhook-events-console"></a>

透過主控台建立 GitLab 專案時，請選取下列選項以在專案中建立 GitLab 群組 Webhook。如需群組 GitLab Webhook 的詳細資訊，請參閱 [GitLab 群組 Webhook](gitlab-group-webhook.md)。

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1. 建立建置專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [執行建置 (主控台)](run-build-console.md)。
   +  在 **Source (來源)** 中：
     +  針對**來源提供者**，選擇 **GitLab** 或 **GitLab 自我管理**。
     +  針對**儲存庫**，選擇 **GitLab 範圍 Webhook**。

        GitLab 儲存庫會自動設定為 `CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION`，這是群組 Webhook 所需的來源位置。
**注意**  
使用群組 Webhook 時，請確定 CodeBuild 具有在 GitLab 中建立群組層級 Webhook 的許可。如果您使用的是[現有的 OAuth 連線](access-tokens-gitlab-overview.md#connections-gitlab)，您可能需要重新產生連線，才能授予 CodeBuild 此許可。  
![\[GitLab 範圍 Webhook 的組態。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/gitlab-group-source.png)
   +  在**主要來源 Webhook 事件**中：
     +  針對**群組名稱**，輸入群組名稱。

       如果專案的來源類型為 `GITLAB_SELF_MANAGED`，您也需要在 Webhook 群組組態中指定網域。例如，如果您群組的 URL 為 **https://domain.com/group/group-name**，則網域為 **https://domain.com**。
**注意**  
 建立 Webhook 之後，就無法變更此名稱。若要變更名稱，您可以刪除並重新建立 Webhook。如果您想要完全移除 Webhook，也可以將專案來源位置更新為 GitLab 儲存庫。  
![\[群組 Webhook 的組態。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/gitlab-group-webhook-primary-events.png)
     +  （選用） 在 **Webhook 事件篩選條件群組**中，您可以指定[要觸發新組建的事件](gitlab-webhook.md)。您也可以指定 `REPOSITORY_NAME`做為篩選條件，以僅觸發來自特定儲存庫的 Webhook 事件建置。  
![\[僅觸發來自特定儲存庫之 Webhook 事件建置的篩選條件。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/github-organization-webhook-filter-groups.png)

       您也可以將事件類型設定為 `WORKFLOW_JOB_QUEUED`，以設定自我託管的 GitLab 執行器。如需詳細資訊，請參閱[中的自我管理 GitLab 執行器 AWS CodeBuild](gitlab-runner.md)。

1. 繼續執行預設值，然後選擇**建立建置專案**。

# 篩選 GitLab 群組 Webhook 事件 (CloudFormation)
<a name="gitlab-group-webhook-events-cfn"></a>

 若要使用 CloudFormation 範本篩選群組 Webhook AWS CodeBuild 事件，請使用專案的 `ScopeConfiguration` 屬性。如需群組 GitLab Webhook 的詳細資訊，請參閱 [GitLab 群組 Webhook](gitlab-group-webhook.md)。

 範本的下列 YAML 格式部分 CloudFormation 會建立四個篩選群組。當一個或全部評估為 true 時，它們會一起觸發組建：
+  第一個篩選條件群組指定在分支上建立或更新提取請求，其 Git 參考名稱符合沒有帳戶 ID 的 `^refs/heads/main$` GitLab 使用者的規則表達式`12345`。
+  第二個篩選群組指定在分支中的檔案上建立的推送請求，並且這些檔案的名稱符合規則表達式 `READ_ME`，而分支的 Git 參考名稱符合規則表達式 `^refs/heads/.*`。
+ 第三個篩選群組會指定其 head 提交訊息符合規則運算式 `\[CodeBuild\]` 的推送請求。
+ 第四個篩選條件群組指定 GitLab CI/CD 管道任務請求，其 CI/CD 管道名稱符合規則表達式 `\[CI-CodeBuild\]`。

```
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: GITLAB
      Location: source-location
    Triggers:
      Webhook: true
      ScopeConfiguration:
        Name: group-name
        Scope: GITLAB_GROUP
      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/.+
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

# GitLab 手動 Webhook
<a name="gitlab-manual-webhook"></a>

您可以設定手動 GitLab Webhook，以防止 CodeBuild 自動嘗試在 GitLab 中建立 Webhook。CodeBuild 會在 中傳回承載 URL 做為建立 Webhook 的一部分，並可用於在 GitLab 中手動建立 Webhook。即使 CodeBuild 不允許在 GitLab 帳戶中建立 Webhook，您仍然可以手動為建置專案建立 Webhook。

使用下列程序來建立 GitLab 手動 Webhook。

**建立 GitLab 手動 Webhook**

1. 開啟 AWS CodeBuild 主控台，網址為 [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home)：//。

1. 建立建置專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [執行建置 (主控台)](run-build-console.md)。
   +  在 **Source (來源)** 中：
     +  針對**來源提供者**，選擇 **GitLab**。
     +  針對**儲存庫**，在**我的 GitLab 帳戶中選擇儲存庫**。
     +  針對 **Repository URL (儲存庫 URL)**，輸入 **https://gitlab.com/*user-name*/*repository-name***。
   +  在**主要來源 Webhook 事件**中：
     +  對於 **Webhook - 選用**，**每次將程式碼變更推送到此儲存庫時，請選擇重建**。
     +  選擇**其他組態**，並針對**手動建立 - 選用**，選擇**在 GitLab 主控台中手動為此儲存庫建立 Webhook。**

1. 繼續執行預設值，然後選擇**建立建置專案**。請記下**承載 URL** 和**秘密**值，因為稍後會使用這些值。

1. 在 開啟 GitLab 主控台`https://gitlab.com/user-name/repository-name/-/hooks`，然後選擇**新增 Webhook**。
   + 針對 **URL**，輸入您先前記下的承載 URL 值。
   + 針對**機密字符**，輸入您稍早記下的機密值。
   + 設定將 Webhook 承載傳送至 CodeBuild 的個別事件。針對**觸發**，從下列事件中選擇：**推送事件**、**合併請求事件**、**發行事件**和**任務事件**。若要進一步了解 CodeBuild 支援的事件類型，請參閱 [GitLab Webhook 事件](gitlab-webhook.md)。

1. 選擇**新增 Webhook**。

# GitLab Webhook 事件
<a name="gitlab-webhook"></a>

您可以使用 Webhook 篩選群組來指定觸發組建的 GitLab Webhook 事件。例如，您可以指定僅針對特定分支的變更觸發組建。

您可以建立一或多個 Webhook 篩選條件群組，以指定哪些 Webhook 事件觸發組建。如果任何篩選條件群組評估為 true，則會觸發組建，這會在群組中的所有篩選條件評估為 true 時發生。當您建立篩選條件群組時，您可以指定：

**事件**  
對於 GitLab，您可以選擇下列一或多個事件：`PUSH`、`PULL_REQUEST_CREATED`、`PULL_REQUEST_UPDATED`、`PULL_REQUEST_MERGED`、`PULL_REQUEST_REOPENED`、`PULL_REQUEST_CLOSED`、 `RELEASED`和 `WORKFLOW_JOB_QUEUED`。  
Webhook 的事件類型位在 `X-GitLab-Event` 欄位的標頭中。下表顯示 `X-GitLab-Event` 標頭值如何映射到事件類型。對於 `Merge Request Hook` Webhook 事件，承載`object_atttributes.action`將包含合併請求類型的其他資訊。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/gitlab-webhook.html)
對於 `PULL_REQUEST_MERGED`，如果提取請求與 squash 策略合併，且提取請求分支已關閉，則原始提取請求遞交不再存在。在此情況下，`CODEBUILD_WEBHOOK_MERGE_COMMIT`環境變數會包含壓縮合併遞交的識別符。

**一或多個選用篩選條件**  
使用規則表達式來指定篩選條件。若要讓事件觸發組建，與其相關聯的群組中的每個篩選條件都必須評估為 true。    
`ACTOR_ACCOUNT_ID` (`ACTOR_ID` 主控台中的 )  
當 GitLab 帳戶 ID 符合規則表達式模式時，Webhook 事件會觸發組建。這個值會出現在 Webhook 篩選條件承載之 `actor` 物件的 `account_id` 屬性中。  
`HEAD_REF`  
當頭部參考符合規則表達式模式 （例如， `refs/heads/branch-name`和 ) 時，Webhook 事件會觸發組建`refs/tags/tag-name`。`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` 欄位中。  
`FILE_PATH`  
當變更的檔案路徑符合規則表達式模式時，Webhook 會觸發組建。  
`COMMIT_MESSAGE`  
當前端遞交訊息符合規則表達式模式時，Webhook 會觸發組建。  
`WORKFLOW_NAME`  
當工作流程名稱符合規則表達式模式時，Webhook 會觸發組建。

**注意**  
您可以在 GitLab 儲存庫的 Webhook 設定中找到 Webhook 承載。

**Topics**
+ [

# Filter GitLab Webhook 事件 （主控台）
](gitlab-webhook-events-console.md)
+ [

# Filter GitLab Webhook 事件 (SDK)
](gitlab-webhook-events-sdk.md)
+ [

# 篩選 GitLab Webhook 事件 (CloudFormation)
](gitlab-webhook-events-cfn.md)

# Filter GitLab Webhook 事件 （主控台）
<a name="gitlab-webhook-events-console"></a>

使用下列指示來使用 AWS 管理主控台 來篩選 Webhook 事件。如需 GitLab Webhook 事件的詳細資訊，請參閱 [GitLab Webhook 事件](gitlab-webhook.md)。

1.  當您建立專案時，請選取 **Rebuild every time a code change is pushed to this repository (在每次將程式碼變更推送至此儲存庫時重建)**。

1.  從 **Event type (事件類型)**，選擇一或多個事件。

1.  若要篩選事件觸發組建的時間，請在 **Start a build under these conditions (在這些情況下開始組建)** 下新增一或多個選用的篩選條件。

1.  若要篩選何時不觸發事件，請在 **Don't start a build under these conditions (在這些情況下不開始組建)** 下新增一或多個選用的篩選條件。

1.  選擇 **Add filter group (新增篩選群組)** 新增另一個篩選群組。

 如需詳細資訊，請參閱《 *AWS CodeBuild API 參考*》中的 [建立組建專案 (主控台)](create-project.md#create-project-console)和 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

在這個範例中，Webhook 篩選群組僅針對提取請求觸發組建：

![\[僅針對提取請求觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-gitlab.png)


在有兩個篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/branch1!`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/branch1$`。

![\[兩個篩選群組的範例。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-head-base-regexes-gitlab.png)


在這個範例中，Webhook 篩選群組針對所有請求 (標籤事件除外) 觸發組建。

![\[Webhook 篩選條件群組，可針對標籤事件以外的所有請求觸發組建。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-exclude-gitlab.png)


在這個範例中，只有在檔案名稱符合規則表達式 `^buildspec.*` 的檔案變更時，Webhook 篩選群組才會觸發組建。

![\[只有當檔案的名稱符合指定的規則表達式時，才會觸發組建的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-regex-gitlab.png)


在此範例中，Webhook 篩選群組只會在 `src`或 `test` 資料夾中變更檔案時觸發組建。

![\[只有在指定資料夾中變更檔案時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-file-name-combined-regex-gitlab.png)


在此範例中，Webhook 篩選條件群組只會在 GitLab 使用者所做的變更中觸發組建，而該使用者的帳戶 ID 不符合規則表達式 `actor-account-id`。

**注意**  
 如需如何尋找 GitLab 帳戶 ID 的資訊，請參閱 https://api.github.com/users/*user-name*，其中 *user-name* 是您的 GitLab 使用者名稱。

![\[只有當沒有帳戶 ID 的 GitLab 使用者進行變更時，才會觸發組建的 Webhook 篩選群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-actor-gitlab.png)


在此範例中，當 head 提交訊息符合規則運算式 `\[CodeBuild\]` 時，webhook 篩選群組會觸發推送事件的建置。

![\[當前端遞交訊息符合規則表達式時，觸發推送事件建置的 Webhook 篩選條件群組。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-webhook-filter-commit-message-gitlab.png)


# Filter GitLab Webhook 事件 (SDK)
<a name="gitlab-webhook-events-sdk"></a>

 若要使用 AWS CodeBuild SDK 篩選 Webhook 事件，請使用 `CreateWebhook`或 `UpdateWebhook` API 方法請求語法中的 `filterGroups` 欄位。如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

如需 GitLab Webhook 事件的詳細資訊，請參閱 [GitLab Webhook 事件](gitlab-webhook.md)。

 若要建立 Webhook 篩選條件來只針對提取請求觸發組建，請在請求語法插入以下程式碼：

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

 若要建立 Webhook 篩選條件來只針對指定的分支觸發組建，請使用 `pattern` 參數指定規則表達式來篩選分支名稱。在有兩個篩選群組的範例中，當一個或兩個篩選群組評估為 true 時，就會觸發組建：
+ 第一個篩選群組指定在分支上建立或更新的提取請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/main$`，而標頭參考符合 `^refs/heads/myBranch$`。
+ 第二個篩選群組在分支上指定推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/myBranch$`。

```
"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 為 的 GitLab 使用者進行變更時，才會觸發組建`actor-account-id`。

**注意**  
 如需如何尋找 GitLab 帳戶 ID 的資訊，請參閱 https://api.github.com/users/*user-name*，其中 *user-name* 是您的 GitLab 使用者名稱。

```
"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.*"
    }
  ]
]
```

在此範例中，篩選條件群組指定只有在 `src`或 `test` 資料夾中變更檔案時，才會觸發組建。

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

您可以建立篩選條件，只有在 head 提交訊息符合模式引數中的規則運算式時，才觸發組建。在這個範例中，篩選群組指定只有在推送事件的 head 遞交訊息符合規則表達式 `\[CodeBuild\]` 時，才觸發組建。

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

# 篩選 GitLab Webhook 事件 (CloudFormation)
<a name="gitlab-webhook-events-cfn"></a>

 若要使用 CloudFormation 範本篩選 Webhook 事件，請使用 AWS CodeBuild 專案的 `FilterGroups` 屬性。如需 GitLab Webhook 事件的詳細資訊，請參閱 [GitLab Webhook 事件](gitlab-webhook.md)。

在 CloudFormation 範本中，以下 YAML 格式的部分建立兩個篩選群組。當其中一個或兩個評估為 true 時，它們會一起觸發組建：
+  第一個篩選條件群組指定在分支上建立或更新提取請求，其 Git 參考名稱符合沒有帳戶 ID 的 `^refs/heads/main$` GitLab 使用者的規則表達式`12345`。
+  第二個篩選群組指定分支上建立的推送請求，並且這些分支的 Git 參考名稱符合規則表達式 `^refs/heads/.*`。
+ 第三個篩選群組會指定其 head 提交訊息符合規則運算式 `\[CodeBuild\]` 的推送請求。
+ 第四個篩選條件群組會指定工作流程名稱符合規則表達式 的 GitHub Actions 工作流程任務請求`\[CI-CodeBuild\]`。

```
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: GITLAB
      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\]
        - - Type: EVENT
            Pattern: WORKFLOW_JOB_QUEUED
          - Type: WORKFLOW_NAME
            Pattern: \[CI-CodeBuild\]
```

# Buildkite 手動 Webhook
<a name="buildkite-manual-webhook"></a>

目前，CodeBuild 需要手動建立所有 Buildkite Webhook。CodeBuild 會在呼叫中傳回承載 URL 來建立 Webhook，可用於在 Buildkite 中手動建立 Webhook。

使用下列程序來建立 Buildkite 手動 Webhook。

**使用 Webhook 建立 CodeBuild 專案**

1. 開啟 AWS CodeBuild 主控台，網址為 [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home)：//。

1. 建立建置專案。如需詳細資訊，請參閱 [建立組建專案 (主控台)](create-project.md#create-project-console) 及 [執行建置 (主控台)](run-build-console.md)。

1. 在**專案組態**中，選擇**執行器專案**。

   在**執行器**中：
   + 針對 **Runner 供應商**，選擇 **Buildkite**。
   + 對於 **Buildkite 代理程式字符**，**使用建立秘密頁面選擇建立新的代理程式字符**。系統會提示您在 AWS Secrets Manager 中建立新的秘密，其秘密值等於您在上面產生的 Buildkite 代理程式字符。
   + （選用） 如果您想要為任務使用 CodeBuild 受管登入資料，請在 **Buildkite 來源登入資料選項下選取任務的來源**儲存庫提供者，並確認已為您的帳戶設定登入資料。此外，請確認您的 Buildkite 管道使用 **HTTPS 的 Checkout**。

1. 
   +  在 **Environment (環境)** 中：
     + 選擇支援**的環境映像**和**運算**。請注意，您可以選擇使用 GitHub Actions 工作流程 YAML 中的標籤覆寫映像和執行個體設定。如需詳細資訊，請參閱 [步驟 2：更新您的 GitHub 動作工作流程 YAML](action-runner.md#sample-github-action-runners-update-yaml)
   +  在 **Buildspec (建置規格)** 中：
     + 請注意，除非新增 做為標籤，否則您的 buildspec `buildspec-override:true` 將被忽略。反之，CodeBuild 會覆寫它，以使用將設定自我託管執行器的命令。

1. 繼續執行預設值，然後選擇**建立建置專案**。

1. 從**建立 Webhook** 快顯視窗中儲存**承載 URL** 和**秘密**值。依照快顯視窗中的指示建立新的 Buildkite 組織 Webhook。

# 提取請求評論核准
<a name="pull-request-build-policy"></a>

CodeBuild 支援提取請求建置政策，可對提取請求觸發的建置提供額外的控制。您可能不想自動建立來自未知使用者的提取請求，直到可以檢閱變更為止。此功能可讓您要求其中一位團隊成員先檢閱程式碼，然後執行管道。在建置由不明參與者提交的程式碼時，這通常用作安全措施。

提取請求建置政策可讓您根據參與者的許可和核准狀態，控制 CodeBuild 何時觸發提取請求的建置。這對接受外部協作者貢獻的公有儲存庫或儲存庫來說特別重要。

啟用時，此功能可確保只有在下列任一情況下才會針對提取請求觸發組建：
+ 提取請求是由信任的貢獻者建立。
+ 信任的貢獻者會透過張貼特定註解來核准提取請求。

## 運作方式
<a name="pull-request-build-policy.how-it-works"></a>

**信任的貢獻者**  
信任的貢獻者是在來源控制系統中目前角色的使用者，會在提取請求型政策中設定為核准者角色。當信任的貢獻者建立提取請求時，CodeBuild 會自動觸發建置，以維護目前的行為。

**不受信任的貢獻者**  
不受信任的貢獻者是未在核准者角色清單中設定角色的使用者。當不受信任的貢獻建立提取請求時：  

1. CodeBuild 會將建置狀態標記為「失敗」，並顯示「啟動建置所需的提取請求核准」訊息。

1. 信任的貢獻者必須檢閱變更，並發佈評論給 `/codebuild_run(<SHA_OF_THE_LATEST_COMMIT>)`以觸發建置。例如 `/codebuild_run(046e8b67481d53bdc86c3f6affdd5d1afae6d369)`。

1. CodeBuild 驗證評論者的許可，並在核准時觸發組建。

1. 組建結果會在提取請求頁面上回報。

**註解核准語法**  
信任的貢獻者可以使用下列評論格式核准組建：  
+ `/codebuild_run(046e8b67481d53bdc86c3f6affdd5d1afae6d369)` - 根據指定的遞交 SHA 觸發建置。

## Configuration
<a name="pull-request-build-policy.configuration"></a>

**預設行為**  
預設會為所有新建立的 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"]`

## 範例
<a name="pull-request-build-policy.examples"></a>

**為所有提取請求啟用註解核准**  
若要使用 AWS CodeBuild SDK 啟用或停用 Webhook 的提取請求建置政策，請使用 `CreateWebhook`或 `UpdateWebhook` API 方法請求語法中的 `pullRequestBuildPolicy` 欄位。如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。  
具有 Github 角色的使用者管理、維護和寫入將被視為信任的貢獻者。  

```
"pullRequestBuildPolicy": {
    "requiresCommentApproval": "ALL_PULL_REQUESTS",
    "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAIN", "GITHUB_WRITE"]
}
```

**僅針對儲存庫管理員和維護程式啟用註解核准**  
具有 GitHub 角色的使用者 Admin， Maintain 將被視為信任的貢獻者。  

```
"pullRequestBuildPolicy": {
    "requiresCommentApproval": "FORK_PULL_REQUESTS",
    "approverRoles": ["GITHUB_ADMIN", "GITHUB_MAINTAINER"]
}
```

**停用註解核准**  

```
"pullRequestBuildPolicy": { 
    "requiresCommentApproval": "DISABLED"
}
```

## AWS CloudFormation
<a name="pull-request-build-policy.cloudformation"></a>

若要使用 AWS CloudFormation 範本啟用或停用 Webhook 的提取請求建置政策，請使用 PullRequestBuildPolicy 屬性。下列 an AWS CloudFormation 範本的 YAML 格式部分會建立具有 Webhook 的專案，該 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
```

## 主控台組態
<a name="pull-request-build-policy.console"></a>

若要使用 AWS 管理主控台篩選 Webhook 事件：

1. 對於**註解核准**，請針對所有提取請求 (`ALL_PULL_REQUEST`) 選取停用或啟用，或僅針對叉 () 的提取請求`FORK_PULL_REQUEST`選取。

1. 對於**核准者角色**，選取在需要評論核准時具有提取請求組建核准權限的儲存庫角色。

如需詳細資訊，請參閱 *CodeBuild API 參考*中的 [建立組建專案 (主控台)](create-project.md#create-project-console)和 [WebhookFilter](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_WebhookFilter.html)。

![\[具有註解核准的主要來源 Webhook 事件主控台。\]](http://docs.aws.amazon.com/zh_tw/codebuild/latest/userguide/images/pull-request-comment-approval.png)
