本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:設定 CodeBuild GitHub託管動作執行器
本教學課程示範如何設定 CodeBuild 專案以執行 GitHub 動作任務。如需搭配 使用 GitHub 動作的詳細資訊, CodeBuild 請參閱 教學課程:設定 CodeBuild GitHub託管動作執行器。
若要完成此教學課程,您必須先:
-
與個人存取權杖、Secrets Manager 秘密、OAuth應用程式或 GitHub 應用程式連線。如果您想要與OAuth應用程式連線,您必須使用 CodeBuild 主控台來執行此操作。如果您想要建立個人存取權杖,您可以使用 CodeBuild 主控台或使用 ImportSourceCredentials API。如需更多指示,請參閱 GitHub 和 GitHub Enterprise Server 存取 CodeBuild。
-
CodeBuild 連線至 GitHub 您的帳戶。若要這麼做,您可以執行下列其中一項操作:
-
您可以在主控台中新增 GitHub 作為來源提供者。您可以使用個人存取權杖、Secrets Manager 秘密、OAuth應用程式或 GitHub 應用程式進行連線。如需說明,請參閱 GitHub 和 GitHub Enterprise Server 存取 CodeBuild。
-
您可以透過 匯入您的 GitHub 憑證ImportSourceCredentials API。這只能使用個人存取權杖來完成。如果您使用OAuth應用程式連線,則必須改用主控台連線。如需說明,請參閱 GitHub 使用存取權杖連線 (CLI) 。
注意
只有在您尚未 GitHub 為您的帳戶連線至 時,才需要這麼做。
-
步驟 1:使用 Webhook 建立 CodeBuild專案
在此步驟中,您將使用 Webhook 建立 CodeBuild 專案,並在 GitHub 主控台中檢閱。您也可以選擇 GitHub Enterprise 作為來源提供者。若要進一步了解如何在 GitHub Enterprise 中建立 Webhook,請參閱 GitHub 手動鉤。
使用 Webhook 建立 CodeBuild 專案
-
在 https://console.aws.amazon.com/codesuite/Codebuild/home
開啟 AWS CodeBuild 主控台。 -
建立建置專案。如需詳細資訊,請參閱 建立組建專案 (主控台) 及 執行建置 (主控台)。
-
在 Source (來源) 中:
-
對於來源提供者 ,選擇 GitHub。
-
對於儲存庫 ,請在我的 GitHub 帳戶中選擇儲存庫 。
-
對於儲存庫 URL,輸入
https://github.com/
。user-name
/repository-name
注意
根據預設,您的專案只會接收單一儲存庫
WORKFLOW_JOB_QUEUED
的事件。如果您想要接收組織或企業內所有儲存庫的事件,請參閱 GitHub 全球和組織網絡掛鉤。 -
-
在主要來源 Webhook 事件 中:
-
針對 Webhook - 選用 ,選取每次將程式碼變更推送至此儲存庫時重建 。
-
對於事件類型 ,選取 WORKFLOW_JOB_QUEUED。啟用此選項後,建置只會由GitHub動作工作流程任務事件觸發。
注意
CodeBuild 只有在 Webhook 具有包含 WORKFLOW_JOB_QUEUED 事件篩選條件的篩選條件群組時,才會處理 GitHub 動作工作流程任務事件。
-
-
在 Environment (環境) 中:
-
選擇支援的環境映像和運算 。請注意,您可以選擇使用 GitHub 動作工作流程 中的標籤覆寫映像和執行個體設定YAML。如需詳細資訊,請參閱 步驟 2:更新您的 GitHub動作工作流程 YAML
-
-
在 Buildspec (建置規格) 中:
-
請注意,除非
buildspec-override:true
新增為標籤,否則您的 buildspec 會被忽略。相反地, CodeBuild 會覆寫它,以使用設定自我託管執行器的命令。
-
-
-
繼續執行預設值,然後選擇建立建置專案 。
-
在 開啟 GitHub 主控台
https://github.com/
,以確認 webhook 已建立並啟用,以交付工作流程任務事件。user-name
/repository-name
/settings/hooks
步驟 2:更新您的 GitHub動作工作流程 YAML
在此步驟中,您將在 中更新您的 GitHub 動作工作流程YAML檔案GitHub
更新您的 GitHub動作工作流程 YAML
導覽GitHub
runs-on
-
您可以指定專案名稱和執行 ID,在這種情況下,建置將使用您現有的專案組態進行運算、映像、映像版本和執行個體大小。需要專案名稱,才能將 GitHub 動作任務的 AWS相關設定連結至特定 CodeBuild專案。透過在 中包含專案名稱YAML, CodeBuild 允許 使用正確的專案設定叫用任務。透過提供執行 ID, CodeBuild 會將您的建置映射至特定工作流程執行,並在工作流程執行取消時停止建置。如需詳細資訊,請參閱
github
內容。 runs-on: codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }}注意
請確定您的
<project-name>
符合您在上一個步驟中建立的專案名稱。如果不相符, CodeBuild 將不會處理 webhook, GitHub且動作工作流程可能會暫停。以下是 GitHub 動作工作流程 的範例YAML:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} steps: - run: echo "Hello World!"
-
您也可以覆寫標籤中的映像和運算類型。如需可用映像的清單, CodeBuild託管 GitHub 動作執行器支援的運算映像請參閱 。標籤中的運算類型和映像會覆寫專案上的環境設定。若要覆寫 CodeBuild EC2或 Lambda 運算建置的環境設定,請使用下列語法:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - image:<environment-type>
-<image-identifier>
- instance-size:<instance-size>
以下是 GitHub 動作工作流程 的範例YAML:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
您可以在 標籤中覆寫用於建置的機群。這將覆寫在專案上設定的機群設定,以使用指定的機群。如需詳細資訊,請參閱在預留容量機群上執行建置。若要覆寫 Amazon EC2運算建置的機群設定,請使用下列語法:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
若要同時覆寫用於建置的機群和映像,請使用下列語法:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - fleet:<fleet-name>
- image:<environment-type>
-<image-identifier>
以下是 GitHub 動作工作流程 的範例YAML:
name: Hello World on: [push] jobs: Hello-World-Job: runs-on: - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }} - image:arm-3.0 - instance-size:small steps: - run: echo "Hello World!"
-
若要在自訂映像上執行 GitHub 動作任務,您可以在 CodeBuild 專案中設定自訂映像,並避免提供映像覆寫標籤。 CodeBuild 如果未提供映像覆寫標籤, 將使用專案中設定的影像。
-
或者,您可以在 CodeBuild 支援標籤之外提供標籤。為了覆寫建置的屬性,這些標籤將被忽略,但不會失敗 webhook 請求。例如,將 新增
testLabel
為標籤不會阻止建置執行。
注意
如果 GitHub託管執行器提供的相依性無法在 CodeBuild環境中使用,您可以使用工作流程執行中的 GitHub 動作安裝相依性。例如,您可以使用 setup-python
執行 buildspec 命令 INSTALL、PRE_ BUILD和 POST_BUILD 階段
依預設, 會在執行自我託管 GitHub 動作建置時 CodeBuild 忽略任何 buildspec 命令。若要在建置期間執行 buildspec 命令, buildspec-override:true
可以新增為標籤的尾碼:
runs-on: - codebuild-
<project-name>
-${{ github.run_id }}-${{ github.run_attempt }} - buildspec-override:true
使用此命令, CodeBuild 會在actions-runner
容器的主要來源資料夾中建立名為 的資料夾。當 GitHub 動作執行器在BUILD
階段期間啟動時,執行器將在 actions-runner
目錄中執行。
在自我託管 GitHub 動作建置中使用 buildspec 覆寫時,有幾個限制:
-
CodeBuild 不會在
BUILD
階段期間執行 buildspec 命令,因為自我託管執行器會在BUILD
階段中執行。 -
CodeBuild 不會在
DOWNLOAD_SOURCE
階段期間下載任何主要或次要來源。如果您已設定 buildspec 檔案,則只會從專案的主要來源下載該檔案。 -
如果建置命令在
PRE_BUILD
或INSTALL
階段失敗, CodeBuild 將不會啟動自我託管執行器,且 GitHub 動作工作流程任務將需要手動取消。 -
CodeBuild 在
DOWNLOAD_SOURCE
階段期間擷取 Runner 權杖,其過期時間為一小時。如果您的PRE_BUILD
或INSTALL
階段超過一小時,則執行器權杖可能會在 GitHub 自我託管的執行器啟動之前過期。
步驟 3:檢閱您的結果
每當 GitHub 動作工作流程執行時, CodeBuild 都會透過 Webhook 接收工作流程任務事件。對於工作流程中的每個任務, 會 CodeBuild 啟動建置以執行暫時 GitHub 動作執行器。執行器負責執行單一工作流程任務。任務完成後,執行器和相關聯的建置程序將立即終止。
若要檢視您的工作流程任務日誌,請在 中導覽至您的儲存庫 GitHub、選擇動作 、選擇所需的工作流程,然後選擇您要檢閱日誌的特定任務。
您可以在 中等待自我託管執行器提取任務時,檢閱日誌中請求的標籤 CodeBuild。
任務完成後,您將能夠檢視任務的日誌。
Filter GitHub Actions Webhook 事件 (AWS CloudFormation)
範本的 AWS CloudFormation 下列 YAML格式化部分會建立篩選條件群組,在評估為 true 時觸發建置。下列篩選條件群組會指定工作流程名稱符合規則表達式 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: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION Triggers: Webhook: true ScopeConfiguration: Name: organization-name FilterGroups: - - Type: EVENT Pattern: WORKFLOW_JOB_QUEUED - Type: WORKFLOW_NAME Pattern: \[CI-CodeBuild\]
Filter GitHub Actions Webhook 事件 (AWS CDK)
下列 AWS CDK 範本會建立篩選條件群組,在評估為 true 時觸發建置。下列篩選條件群組會指定 GitHub 動作工作流程任務請求。
import { aws_codebuild as codebuild } from 'aws-cdk-lib'; import {EventAction, FilterGroup} from "aws-cdk-lib/aws-codebuild"; const source = codebuild.Source.gitHub({ owner: 'owner', repo: 'repo', webhook: true, webhookFilters: [FilterGroup.inEventOf(EventAction.WORKFLOW_JOB_QUEUED)], })
Filter GitHub Actions Webhook 事件 (Terraform)
下列 Terraform 範本會建立篩選條件群組,在評估為 true 時觸發建置。下列篩選條件群組會指定 GitHub 動作工作流程任務請求。
resource "aws_codebuild_webhook" "example" { project_name = aws_codebuild_project.example.name build_type = "BUILD" filter_group { filter { type = "EVENT" pattern = "WORKFLOW_JOB_QUEUED" } } }