本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:設定 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_runner
和manage_runner
來自 GitLab OAuth應用程式。如果 CodeConnections 特定 GitLab 帳戶已有 ,則不會自動請求更新許可。若要這麼做,您可以前往 CodeConnections 主控台並建立相同 GitLab 帳戶的虛擬連線,以觸發重新授權以取得額外的許可。因此,所有現有的連線都可以使用 Runner 功能。完成後,您可以刪除虛擬連線。
步驟 1:使用 Webhook 建立 CodeBuild專案
在此步驟中,您將使用 Webhook 建立 CodeBuild 專案,並在 GitLab 主控台中檢閱。
使用 Webhook 建立 CodeBuild 專案
-
在 https://console.aws.amazon.com/codesuite/Codebuild/home
開啟 AWS CodeBuild 主控台。 -
建立建置專案。如需詳細資訊,請參閱 建立組建專案 (主控台) 及 執行建置 (主控台)。
-
在 Source (來源) 中:
-
對於來源提供者 ,選擇 GitLab。
-
針對憑證 ,選擇下列其中一項:
-
選擇預設來源憑證 。預設連線會將預設 GitLab 連線套用至所有專案。
-
選擇自訂來源憑證 。自訂連線會套用自訂 GitLab連線,覆寫帳戶的預設設定。
注意
如果您尚未建立與提供者的連線,則必須建立新的 GitLab連線。如需說明,請參閱 CodeBuild 連線至 GitLab。
-
-
對於儲存庫 ,使用命名空間指定專案路徑 GitLab ,以選擇 中的專案名稱。
-
-
在主要來源 Webhook 事件 中:
-
針對 Webhook - 選用 ,選取每次將程式碼變更推送到此儲存庫時重建 。
-
對於事件類型 ,選取 WORKFLOW_JOB_QUEUED。一旦啟用,建置只會由 GitLab CI/CD 管道任務事件觸發。
注意
CodeBuild 只有在 Webhook 具有包含 WORKFLOW_JOB_QUEUED 事件篩選條件的篩選條件群組時,才會處理 GitLab CI/CD 管道任務事件。
-
-
在 Environment (環境) 中:
-
選擇支援的環境映像和運算 。請注意,您可以選擇使用 GitLab CI/CD 管道 中的標籤覆寫映像和執行個體設定YAML。如需詳細資訊,請參閱步驟 2:在您的儲存庫中建立 .gitlab-ci.yml 檔案。
-
-
在 Buildspec (建置規格) 中:
-
請注意,除非
buildspec-override:true
新增為標籤,否則您的 buildspec 會被忽略。相反地, CodeBuild 會覆寫它,以使用將設定自我管理執行器的命令。
-
-
-
繼續進行預設值,然後選擇建立建置專案 。
-
在 開啟 GitLab 主控台
https://gitlab.com/
,以確認 webhook 已建立並啟用,以交付工作流程任務事件。user-name
/repository-name
/-/hooks
步驟 2:在您的儲存庫中建立 .gitlab-ci.yml 檔案
在此步驟中,您將在 中建立.gitlab-ci.yml
檔案,GitLab
更新您的 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_BUILD
或INSTALL
階段失敗, CodeBuild 將不會啟動自我管理的執行器,而且 GitLab CI/CD 管道任務將需要手動取消。 -
CodeBuild 在
DOWNLOAD_SOURCE
階段期間擷取執行器權杖,其過期時間為一小時。如果您的PRE_BUILD
或INSTALL
階段超過一小時,則執行器權杖可能會在 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\]