GitHub 網絡掛鉤事件 - AWS CodeBuild

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

GitHub 網絡掛鉤事件

您可以使用 webhook 過濾器組來指定哪些 GitHub webhook 事件觸發構建。例如,您可以指定只針對特定分支的變更觸發組建。

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

一個事件

對於 GitHub,您可以選擇下列一或多個事件:PUSHPULL_REQUEST_CREATEDPULL_REQUEST_UPDATED、、PULL_REQUEST_REOPENEDPULL_REQUEST_MERGEDPULL_REQUEST_CLOSEDRELEASEDPRERELEASED、、和WORKFLOW_JOB_QUEUED。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
pull_request closed,而 merged 欄位為 false PULL_REQUEST_CLOSED
push N/A PUSH
release 發布 RELEASED
release 預發行 PRERELEASED
workflow_job queued WORKFLOW_JOB_QUEUED
注意

PULL_REQUEST_REOPENED事件類型只能與 GitHub GitHub 企業伺服器搭配使用。RELEASEDPRERELEASED、和WORKFLOW_JOB_QUEUED事件類型 GitHub 只能搭配使用。如需 WORKFLOW_JOB_QUEUED 的詳細資訊,請參閱自學課程:設定 CodeBuild 自我託管的 GitHub 動作亞軍

一個或多個可選的過濾器

使用規則表達式來指定篩選條件。對於觸發構建的事件,與其關聯的組中的每個過濾器都必須評估為 true。

ACTOR_ACCOUNT_IDACTOR_ID在控制台中)

當 GitHub 或 GitHub企業伺服器帳戶識別碼符合規則運算式模式時,webhook 事件會觸發組建。此值位於 Webhook 承載之 sender 物件的 id 屬性中。

HEAD_REF

當頭部引用匹配正則表達式模式(例如,refs/heads/branch-namerefs/tags/tag-name)時,webhook 事件觸發構建。若為推送事件,參考名稱位在 Webhook 承載的 ref 屬性中。若為提取請求事件,分支名稱位在 Webhook 承載之 head 物件的 ref 屬性中。

BASE_REF

當基底參考符合規則運算式模式 (例如refs/heads/branch-name) 時,webhook 事件會觸發組建。BASE_REF 篩選條件僅可搭配提取請求事件使用。分支名稱位在 Webhook 承載之 base 物件的 ref 屬性中。

FILE_PATH

當更改文件的路徑與正則表達式模式匹配時,webhook 觸發構建。FILE_PATH篩選器可與 GitHub 推送和提取要求事件和 GitHub企業伺服器推送事件搭配使用。它不能與 GitHub企業服務器提取請求事件一起使用。

COMMIT_MESSAGE

當頭提交消息與正則表達式模式匹配時,webhook 觸發構建。COMMIT_MESSAGE篩選器可與 GitHub 推送和提取要求事件和 GitHub企業伺服器推送事件搭配使用。它不能與 GitHub企業服務器提取請求事件一起使用。

TAG_NAME

當釋放的標籤名稱與正則表達式模式匹配時,webhook 觸發構建。TAG_NAME篩選器可與 GitHub 已發行和預先發行的要求事件搭配使用。

RELEASE_NAME

當發行名稱與正則表達式模式匹配時,webhook 觸發構建。RELEASE_NAME篩選器可與 GitHub 已發行和預先發行的要求事件搭配使用。

WORKFLOW_NAME

當工作流程名稱符合規則運算式模式時,webhook 會觸發組建。WORKFLOW_NAME篩選器可與 GitHub 「動作」工作流程工作排入佇列的要求事件搭配使用。

注意

您可以在存儲庫的 webhook 設置中找到 webhook 有效負載。 GitHub

過濾 GitHub 網絡掛鉤事件(控制台)

主要來源 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. 如有需要,請選擇「新增過濾器群組」以新增其他過濾器群組

如需詳細資訊,請參閱 AWS CodeBuild API 參考WebhookFilter中的建立組建專案 (主控台)和。

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

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

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

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

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

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

在此範例中,Webhook 篩選器群組只會在srctest資料夾中變更檔案時觸發組建。

在此範例中,只有當指定的 GitHub 或 GitHub Enterprise Server 使用者進行變更時,Webhook 篩選器群組才會觸發組建,且帳戶識別碼符合規則運算式actor-account-id

注意

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

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

在此範例中,Webhook 篩選器群組只會觸發 GitHub 「動作」工作流程工作事件的組建。

注意

CodeBuild 只有當網路勾點具有包含 WORKFLOW_JO B_QUEED 事件篩選器的篩選器群組時,才會處理 GitHub 「動作」工作流程工作。

在此範例中,webhook 篩選器群組會針對符合規則運算式CI-CodeBuild的工作流程名稱觸發組建。

篩選 GitHub 網路掛鉤事件 (SDK)

若要使用 AWS CodeBuild SDK 來篩選網路掛接事件,請在CreateWebhookUpdateWebhook API 方法的要求語法中使用filterGroups欄位。如需詳細資訊,請參閱 CodeBuild API 參考WebhookFilter中的。

若要建立 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.*" } ] ]

在此範例中,篩選器群組會指定只有在srctest資料夾中變更檔案時才會觸發組建。

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

您可以建立篩選器,僅在指定 GitHub 或具有帳戶 ID 的 GitHub 企業伺服器使用者進行變更時觸發組建actor-account-id

注意

如需如何尋找 GitHub 帳戶 ID 的詳細資訊,請參閱 https://api.github.com/users/ 使用者名稱,其中使用者名稱是您的 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 網路掛鉤事件 ()AWS CloudFormation

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

  • 第一個過濾器組指定在具有 Git 引 GitHub 用名稱匹配正則表達式的分支上創建或更新提取請求,^refs/heads/main$由沒有帳戶 ID 的用戶12345

  • 第二個篩選群組指定在分支中的檔案上建立的推送請求,並且這些檔案的名稱符合規則表達式 READ_ME,而分支的 Git 參考名稱符合規則表達式 ^refs/heads/.*

  • 第三個篩選群組會指定其 head 提交訊息符合規則運算式 \[CodeBuild\] 的推送請求。

  • 第四個篩選群組會指定 GitHub 「動作」工作流程工作要求,其工作流程名稱與一般運算式相符\[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\]