本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:配置 CodeBuild托管的运行器 GitLab
本教程向您展示如何配置 CodeBuild 项目以运行 C GitLab I/CD 管道作业。有关使用 GitLab 或使用 GitLab 自助管理的更多信息 CodeBuild,请参阅自我管理的 GitLab 跑步者在 AWS CodeBuild。
要完成本教程,您首先必须:
-
使用 Connect 与OAuth应用程序连接 CodeConnections。请注意,连接OAuth应用程序时,必须使用 CodeBuild 控制台进行连接。有关更多说明,请参阅 GitLab 进入 CodeBuild。
-
Connect CodeBuild 到您的 GitLab 账户。为此,您可以在控制台中添加 GitLab 为源提供商。有关说明,请参阅 GitLab 进入 CodeBuild。
注意
只有当你的账户还没有连接时, GitLab 才需要这样做。
使用此功能, CodeBuild 需要其他权限。例如
create_runner
和manage_runner
来自应用程序。 GitLab OAuth如果特定 GitLab 账户已 CodeConnections 有权限,则它不会自动请求权限更新。为此,您可以访问 CodeConnections 控制台并创建与同一 GitLab 账户的虚拟连接,以触发重新授权以获得额外权限。这样,所有现有的连接都可以使用运行器功能。完成后,您可以删除虚拟连接。
第 1 步:使用 webhook 创建 CodeBuild项目
在此步骤中,您将创建一个带有 webhook 的 CodeBuild 项目,并在 GitLab 控制台中对其进行审核。
使用 webhook 创建 CodeBuild 项目
-
在 https://console.aws.amazon.com/codesuite/codebuild
/home 中打开 AWS CodeBuild 控制台。 -
创建构建项目。有关信息,请参阅创建构建项目(控制台)和运行构建(控制台)。
-
在源中:
-
对于源提供商,选择GitLab。
-
对于凭证,请选择以下选项之一:
-
选择默认来源凭据。默认连接将默认 GitLab 连接应用于所有项目。
-
选择自定义来源凭证。自定义连接应用的自定义 GitLab连接会覆盖您账户的默认设置。
注意
如果您尚未创建与提供商的连接,则必须创建一个新的 GitLab连接。有关说明,请参阅 Connect t CodeBuild o GitLab。
-
-
对于 Reposit ory, GitLab 通过使用命名空间指定项目路径来选择项目名称。
-
-
在主要来源 webhook 事件中:
-
对于 Webhook(可选),选择 “每次将代码更改推送到此存储库时重建”。
-
对于事件类型,选择 WORKFLOW_ JOB _ QUEUED。启用此功能后,只能由 C GitLab I/CD 管道作业事件触发构建。
注意
CodeBuild 仅当 Webhook 具有包含 WORKFLOW_ JOB _ QUEUED 事件过滤器的筛选器组时,才会处理 GitLab CI/CD 管道作业事件。
-
-
在环境中:
-
选择支持的环境映像和计算。请注意,您可以选择在 CI GitLab /CD 管道中使用标签来覆盖映像和实例设置。YAML有关更多信息,请参阅 第 2 步:在存储库中创建一个.gitlab-ci.yml 文件。
-
-
在 Buildspec (构建规范) 中:
-
请注意,除非作为标签添加,否则
buildspec-override:true
您的构建规范将被忽略。取而代之的是, CodeBuild 将覆盖它以使用将设置自我管理的运行器的命令。
-
-
-
继续使用默认值,然后选择创建构建项目。
-
打开 GitLab 控制台,验证是否已创建一个 webhook 并已启用 webhook 来传送工作流作业事件。
https://gitlab.com/
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,C GitLab I/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
默认情况下,在运行自 GitLab 管理版本时 CodeBuild 会忽略任何 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,选择 B uild、J ob s,然后选择要查看日志的特定作业。
当作业等待中自我管理的运行者接管时,您可以在日志中 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\]