教學課程:設定 CodeBuild GitHub託管動作執行器 - AWS CodeBuild

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

教學課程:設定 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 為您的帳戶連線至 時,才需要這麼做。

步驟 1:使用 Webhook 建立 CodeBuild專案

在此步驟中,您將使用 Webhook 建立 CodeBuild 專案,並在 GitHub 主控台中檢閱。您也可以選擇 GitHub Enterprise 作為來源提供者。若要進一步了解如何在 GitHub Enterprise 中建立 Webhook,請參閱 GitHub 手動鉤

使用 Webhook 建立 CodeBuild 專案
  1. https://console.aws.amazon.com/codesuite/Codebuild/home 開啟 AWS CodeBuild 主控台。

  2. 建立建置專案。如需詳細資訊,請參閱 建立組建專案 (主控台)執行建置 (主控台)

    • 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 動作工作流程任務事件。

        建置組態以僅由GitHub 動作工作流程任務事件觸發。
    • Environment (環境) 中:

    • Buildspec (建置規格) 中:

      • 請注意,除非buildspec-override:true新增為標籤,否則您的 buildspec 會被忽略。相反地, CodeBuild 會覆寫它,以使用設定自我託管執行器的命令。

  3. 繼續執行預設值,然後選擇建立建置專案

  4. 在 開啟 GitHub 主控台https://github.com/user-name/repository-name/settings/hooks,以確認 webhook 已建立並啟用,以交付工作流程任務事件。

步驟 2:更新您的 GitHub動作工作流程 YAML

在此步驟中,您將在 中更新您的 GitHub 動作工作流程YAML檔案GitHub,以設定建置環境,並在 中使用 GitHub 動作自我託管執行器 CodeBuild。如需詳細資訊,請參閱搭配自我託管執行器和 使用標籤 CodeBuild託管 GitHub 動作執行器支援的標籤覆寫

更新您的 GitHub動作工作流程 YAML

導覽GitHub至 GitHub 動作工作流程並更新runs-on設定YAML,以設定建置環境。若要這麼做,您可以執行下列其中一項操作:

  • 您可以指定專案名稱和執行 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動作來安裝建置環境的 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_BUILDINSTALL階段失敗, CodeBuild 將不會啟動自我託管執行器,且 GitHub 動作工作流程任務將需要手動取消。

  • CodeBuild 在DOWNLOAD_SOURCE階段期間擷取 Runner 權杖,其過期時間為一小時。如果您的 PRE_BUILDINSTALL階段超過一小時,則執行器權杖可能會在 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" } } }