教學課程:設定 CodeBuild GitLab託管的執行器 - AWS CodeBuild

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

教學課程:設定 CodeBuild GitLab託管的執行器

本教學課程說明如何設定 CodeBuild 專案以執行 GitLab CI/CD 管道任務。如需搭配 使用 GitLab 或 GitLab 自我管理的詳細資訊 CodeBuild,請參閱 中的自我管理 GitLab 執行器 AWS CodeBuild

若要完成此教學課程,您必須先:

  • 使用 與OAuth應用程式連線 CodeConnections。請注意,連線至OAuth應用程式時,您必須使用 CodeBuild 主控台來執行此操作。如需更多指示,請參閱 GitLab 在 中存取 CodeBuild

  • CodeBuild 連線至 GitLab 您的帳戶。若要這麼做,您可以在主控台中將 新增 GitLab 為來源提供者。如需說明,請參閱 GitLab 在 中存取 CodeBuild

    注意

    只有在您尚未 GitLab 為帳戶連線至 時,才需要這麼做。

    使用此功能時, CodeBuild 需要額外許可。例如 create_runnermanage_runner 來自 GitLab OAuth應用程式。如果 CodeConnections 特定 GitLab 帳戶已有 ,則不會自動請求更新許可。若要這麼做,您可以前往 CodeConnections 主控台並建立相同 GitLab 帳戶的虛擬連線,以觸發重新授權以取得額外的許可。因此,所有現有的連線都可以使用 Runner 功能。完成後,您可以刪除虛擬連線。

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

在此步驟中,您將使用 Webhook 建立 CodeBuild 專案,並在 GitLab 主控台中檢閱。

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

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

    • Source (來源) 中:

      • 對於來源提供者 ,選擇 GitLab

      • 針對憑證 ,選擇下列其中一項:

        • 選擇預設來源憑證 。預設連線會將預設 GitLab 連線套用至所有專案。

        • 選擇自訂來源憑證 。自訂連線會套用自訂 GitLab連線,覆寫帳戶的預設設定。

        注意

        如果您尚未建立與提供者的連線,則必須建立新的 GitLab連線。如需說明,請參閱 CodeBuild 連線至 GitLab

      • 對於儲存庫 ,使用命名空間指定專案路徑 GitLab ,以選擇 中的專案名稱。

    • 主要來源 Webhook 事件 中:

      • 針對 Webhook - 選用 ,選取每次將程式碼變更推送到此儲存庫時重建

      • 對於事件類型 ,選取 WORKFLOW_JOB_QUEUED。一旦啟用,建置只會由 GitLab CI/CD 管道任務事件觸發。

        注意

        CodeBuild 只有在 Webhook 具有包含 WORKFLOW_JOB_QUEUED 事件篩選條件的篩選條件群組時,才會處理 GitLab CI/CD 管道任務事件。

        建置組態以僅由 GitLab CI/CD 管道任務事件觸發。
    • Environment (環境) 中:

    • Buildspec (建置規格) 中:

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

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

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

步驟 2:在您的儲存庫中建立 .gitlab-ci.yml 檔案

在此步驟中,您將在 中建立.gitlab-ci.yml檔案,GitLab以設定建置環境,並在 中使用 GitLab 自我管理的執行器 CodeBuild。如需詳細資訊,請參閱使用自我管理的執行器。

更新您的 GitLab CI/CD 管道 YAML

導覽至 https://gitlab.com/user-name/project-name/-/tree/branch-name 並在您的儲存庫中建立.gitlab-ci.yml檔案。您可以透過執行下列其中一個動作來設定建置環境:

  • 您可以指定 CodeBuild 專案名稱,在這種情況下,建置會使用您現有的專案組態來計算、映像、映像版本和執行個體大小。需要專案名稱,才能將 GitLab 任務的 AWS相關設定連結至特定 CodeBuild專案。透過在 中包含專案名稱YAML, CodeBuild 允許 使用正確的專案設定叫用任務。

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME

    $CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME 必須將建置對應至特定管道任務執行,並在管道執行取消時停止建置。

    注意

    請確定您的 <project-name> 符合您在 中建立的專案名稱 CodeBuild。如果不相符, CodeBuild 將不會處理 Webhook,而且 GitLab CI/CD 管道可能會掛起。

    以下是 GitLab CI/CD 管道 的範例YAML:

    workflow: name: HelloWorld stages: # List of stages for jobs, and their order of execution - build build-job: # This job runs in the build stage, which runs first. stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME
  • 您也可以覆寫標籤中的映像和運算類型。如需可用映像的清單, CodeBuild託管 GitLab 執行器支援的運算映像請參閱 。標籤中的運算類型和映像會覆寫專案上的環境設定。若要覆寫 Amazon EC2運算建置的環境設定,請使用下列語法:

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:<environment-type>-<image-identifier> - instance-size:<instance-size>

    以下是 GitLab CI/CD 管道 的範例YAML:

    stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - image:arm-3.0 - instance-size:small
  • 您可以覆寫標籤中用於建置的機群。這將覆寫在專案上設定的機群設定,以使用指定的機群。如需詳細資訊,請參閱在預留容量機群上執行建置。若要覆寫 Amazon EC2運算建置的機群設定,請使用下列語法:

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name>

    若要覆寫建置所使用的機群和映像,請使用下列語法:

    tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:<fleet-name> - image:<environment-type>-<image-identifier>

    以下是 GitLab CI/CD 管道 的範例YAML:

    stages: - build build-job: stage: build script: - echo "Hello World!" tags: - codebuild-myProject-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - fleet:myFleet - image:arm-3.0
  • 若要在自訂映像上執行 GitLab CI/CD 管道任務,您可以在 CodeBuild 專案中設定自訂映像,並避免提供映像覆寫標籤。 CodeBuild 如果未提供映像覆寫標籤, 將使用專案中設定的影像。

將變更提交至 後.gitlab-ci.yml, GitLab 就會觸發管道,而 build-job會傳送 Webhook 通知,以啟動您在 中的建置 CodeBuild。

執行 buildspec 命令 INSTALL、PRE_ BUILD和 POST_BUILD 階段

根據預設, 會在執行自我管理的建置時 CodeBuild 忽略任何 GitLab buildspec 命令。若要在建置期間執行 buildspec 命令, buildspec-override:true 可以新增為 的字尾tags

tags: - codebuild-<codebuild-project-name>-$CI_PROJECT_ID-$CI_PIPELINE_IID-$CI_JOB_NAME - buildspec-override:true

透過使用此命令, CodeBuild 會在gitlab-runner容器的主要來源資料夾中建立名為 的資料夾。當 GitLab 執行器在BUILD階段期間啟動時,執行器將在 gitlab-runner目錄中執行。

在自我管理的 GitLab 建置中使用 buildspec 覆寫時,有幾個限制:

  • CodeBuild 不會在BUILD階段期間執行 buildspec 命令,因為自我管理的執行器會在BUILD階段中執行。

  • CodeBuild 不會在DOWNLOAD_SOURCE階段期間下載任何主要或次要來源。如果您已設定 buildspec 檔案,則只會從專案的主要來源下載該檔案。

  • 如果建置命令在 PRE_BUILDINSTALL階段失敗, CodeBuild 將不會啟動自我管理的執行器,而且 GitLab CI/CD 管道任務將需要手動取消。

  • CodeBuild 在DOWNLOAD_SOURCE階段期間擷取執行器權杖,其過期時間為一小時。如果您的 PRE_BUILDINSTALL階段超過一小時,則執行器權杖可能會在 GitLab 自我管理的執行器啟動之前過期。

步驟 3:檢閱您的結果

每當管道任務時 GitLab CI/CD pipeline run occurs, CodeBuild would receive the CI/CD pipeline job events through the webhook. For each job in the CI/CD pipeline, CodeBuild starts a build to run an ephemeral GitLab runner. The runner is responsible for executing a single CI/CD。任務完成後,執行器和相關聯的建置程序將立即終止。

若要檢視 CI/CD 管道任務日誌,請在 中導覽至您的儲存庫 GitLab,選擇建置 任務 ,然後選擇您要檢閱日誌的特定任務

您可以在 中等待自我管理的執行器提取任務時,檢閱日誌中請求的標籤 CodeBuild。

篩選 GitLab Webhook 事件 (AWS CloudFormation)

範本的 AWS CloudFormation 下列 YAML格式化部分會建立篩選條件群組,在評估為 true 時觸發建置。下列篩選條件群組會 GitLab CI/CD pipeline job request with a 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: CODEBUILD_DEFAULT_WEBHOOK_SOURCE_LOCATION Triggers: Webhook: true ScopeConfiguration: Name: group-name FilterGroups: - - Type: EVENT Pattern: WORKFLOW_JOB_QUEUED - Type: WORKFLOW_NAME Pattern: \[CI-CodeBuild\]