GitHub Webhook 事件 - AWS CodeBuild

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

GitHub Webhook 事件

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

您可以建立一或多個 Webhook 篩選群組來指定哪些 Webhook 事件會觸發組建。如果一或多個篩選群上的所有篩選條件評估為 true,則會觸發組建。當您建立篩選群組時,您可以指定這些項目:

一個事件

對於 GitHub,您可以選擇以下一或多個事件:PUSHPULL_REQUEST_CREATEDPULL_REQUEST_UPDATEDPULL_REQUEST_REOPENEDPULL_REQUEST_MERGED。Webhook 事件類型位在 Webhook 承載的 X-GitHub-Event 標頭中。在 X-GitHub-Event 標頭中,您可能會看到 pull_requestpush。若為提取請求事件,類型位在 Webhook 事件承載的 action 欄位中。下表顯示 X-GitHub-Event 標頭值和 Webhook 提取請求承載 action 欄位值如何映射到可用的事件類型。

X-GitHub-Event 標頭值 Webhook 事件承載 action 事件類型
pull_request opened PULL_REQUEST_CREATED
pull_request reopened PULL_REQUEST_REOPENED
pull_request synchronize PULL_REQUEST_UPDATED
pull_request closed,而 merged 欄位為 true PULL_REQUEST_MERGED
push N/A PUSH
注意

PULL_REQUEST_REOPENED 事件類型僅能搭配 GitHub 和 GitHub Enterprise Server 使用。

一或多個選用的篩選條件

使用規則表達式來指定篩選條件。若要讓事件觸發組建,相關聯的每個篩選條件必須評估為 true。

ACTOR_ACCOUNT_ID(ACTOR_ID在主控台是)

當 GitHub 或 GitHub Enterprise Server 帳户 ID 符合規則表達式模式時,Webhook 事件會觸發組建。此值位於 Webhook 承載之 sender 物件的 id 屬性中。

HEAD_REF

:當標頭參考符合規則表達式模式時 (例如refs/heads/branch-name或者refs/tags/tag-name。若為推送事件,參考名稱位在 Webhook 承載的 ref 屬性中。若為提取請求事件,分支名稱位在 Webhook 承載之 head 物件的 ref 屬性中。

BASE_REF

:當基本參考符合規則表達式模式時 (例如refs/heads/branch-nameBASE_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 提取請求事件一起使用。

注意

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

篩選 GitHub Webhook 事件 (主控台)

In主來源 Webhook 事件下,選取下列項目。此部分僅在您選擇在我的 GitHub 帳户中的儲存庫來獲取來源儲存庫。

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

  2. Event type (事件類型),選擇一或多個事件。

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

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

  5. 選擇新增篩選條件組(如果需要) 新增另一個篩選組。

如需詳細資訊,請參閱「」建立組建專案 (主控台)WebhookFilter中的AWS CodeBuildAPI 參考

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

在有兩個 Webhook 篩選群組的範例中,當一個或兩個篩選群組評估為 true 時,就會觸發組建:

  • 第一個篩選群組指定在分支上建立、更新或重新開啟的提取請求,並且這些分支的 Git 參考名稱符合規則表達式 ^refs/heads/main$,而標頭參考符合 ^refs/heads/branch1$

  • 第二個篩選群組在分支上指定推送請求,並且這些分支的 Git 參考名稱符合規則表達式 ^refs/heads/branch1$

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

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

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

注意

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

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

篩選 GitHub Webhook 事件 (開發套件)

若要使用 AWS CodeBuild 開發套件來篩選 Webhook 事件,請在 CreateWebhookUpdateWebhook API 方法的請求語法中使用 filterGroups 欄位。如需詳細資訊,請參閱「」WebhookFilter中的CodeBuild API 參考

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

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

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

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

您可以建立篩選條件來指定只有在指定的 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" }, { "type": "ACTOR_ACCOUNT_ID", "pattern": "actor-account-id" } ] ]

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

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

篩選 GitHub Webhook 事件 (AWS CloudFormation)

若要使用 AWS CloudFormation 範本來篩選 Webhook 事件,請使用 AWS CodeBuild 專案的 FilterGroups 屬性。在 AWS CloudFormation 範本中,以下 YAML 格式的部分建立兩個篩選群組。當其中一個或兩個評估為 true 時,它們會一起觸發組建:

  • 第一個篩選群組指定在分支上建立或更新的提取請求,並且這些分支的 Git 參考名稱符合規則表達式 ^refs/heads/main$,而且是由帳戶 ID 不是 12345 的 GitHub 使用者所建立或更新。

  • 第二個篩選群組指定在分支中的檔案上建立的推送請求,並且這些檔案的名稱符合規則表達式 READ_ME,而分支的 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:4.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\]