View a markdown version of this page

教程:配置 CodeBuild-hosted Buildkite 运行器 - AWS CodeBuild

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:配置 CodeBuild-hosted Buildkite 运行器

本教程向您展示如何配置 CodeBuild 项目以运行 Buildkite 作业。有关将 Buildkite 与一起 CodeBuild 使用的更多信息,请参阅。Self-managed Buildkite 跑步者 AWS CodeBuild

要完成本教程,您首先必须:

  • 可以访问 Buildkite 组织。有关设置 Buildkite 账户和组织的更多信息,您可以关注此 Getting Started Tutorial

  • 创建配置为使用自托管运行程序的 Buildkite 管道、集群和队列。有关设置这些资源的更多信息,可以参考 Buildkite Pipeline Setup Tutorial

    在 Buildkite 中构建项目

步骤 1:生成 Buildkite 代理令牌

在此步骤中,您将在 Buildkite 中生成代理令牌,用于对 CodeBuild 自托管运行器进行身份验证。有关此资源的更多信息,请参阅 Buildkite Agent Tokens

生成 Buildkite 代理令牌
  1. 在 Buildkite 集群中,选择代理令牌,然后选择新建令牌

  2. 向令牌添加描述,然后单击创建令牌

  3. 保存代理令牌值,因为它将在稍后在 CodeBuild 项目设置期间使用。

    Buildkite 中的代理令牌

第 2 步:使用 webhook 创建 CodeBuild 项目

使用 webhook 创建 CodeBuild 项目
  1. 在处打开 AWS CodeBuild 控制台https://console.aws.amazon.com/codesuite/codebuild/home

  2. 创建自托管构建项目。有关更多信息,请参阅 创建构建项目(控制台)运行构建(控制台)

    • 项目配置中,选择运行程序项目。在运行程序中:

      • 对于运行程序提供商,选择 Buildkite

      • 对于 Buildkite 代理令牌,选择使用创建密钥页面创建新的代理令牌。系统将提示您在中 AWS Secrets Manager 创建一个新密钥,其密钥值等于您在上面生成的 Buildkite 代理令牌。

      • (可选)如果您想为作业使用 CodeBuild 托管证书,请在 Buildkite 源凭据选项下选择作业的源存储库提供商,并验证是否已为您的账户配置证书。此外,请验证 Buildkite 管道是否采用使用 HTTPS 签出

      注意

      Buildkite 需要编译环境中的源证书才能为你的任务提取源代码。有关可用的源凭证选项,请参阅针对私有存储库对 Buildkite 进行身份验证

    • (可选)在环境中:

      • 选择支持的环境映像计算

        请注意,您可以选择在 Buildkite YAML 步骤中使用标签来覆盖映像和实例设置。有关更多信息,请参阅 步骤 4:更新 Buildkite 管道步骤

    • (可选)在 Buildspec 中:

      • 除非将 buildspec-override: "true" 添加为标签,否则系统默认情况下会忽略 buildspec。相反, CodeBuild 将覆盖它以使用用于设置自托管运行器的命令。

        注意

        CodeBuild 不支持 Buildkite 自托管运行器构建的构建规范文件。对于内联构建规范,如果您配置了托管源证书,则需要在构建规范中启用 git-credential-helper CodeBuild

  3. 继续使用默认值,然后选择创建构建项目

  4. 保存创建 webhook 弹出窗口中的有效载荷 URL密钥值。要么按照弹出窗口中的说明创建新的 Buildkite 组织 webhook,要么继续下一节。

第 3 步:在 Buildkite 中创建 CodeBuild webhook

在此步骤中,您将使用 CodeBuild 网络挂钩中的有效负载网址密钥值在 Buildkite 中创建新的 Webhook。当有效的 Buildkite 任务启动 CodeBuild 时,此网络挂钩将用于在其中触发构建。

在 Buildkite 中创建新的 webhook
  1. 打开您的 Buildkite 组织的 “设置” 页面

  2. 集成下,选择通知服务

  3. 选择 Webhook 框旁边的添加。在添加 Webhook 通知页面中,使用以下配置:

    1. Webhook URL 下,添加保存的有效载荷 URL 值。

    2. 在 “令牌” 下,确认已选中 “按原样 X-Buildkite-Token发送令牌”。将 webhook 密钥值添加到令牌字段。

    3. 在下方,确认已选中 “按原样 X-Buildkite-Token发送令牌”。将 webhook 密钥值添加到令牌字段。

    4. 事件下,选择 job.scheduled webhook 事件。

    5. (可选)在管道下,您可以选择仅触发特定管道的构建。

  4. 选择添加 Webhook 通知

步骤 4:更新 Buildkite 管道步骤

在此步骤中,更新 Buildkite 管道的步骤以添加必要的标签和可选替代。有关支持的标签覆盖的完整列表,请参阅CodeBuild-hosted Buildkite 运行器支持标签覆盖

更新管道步骤
  1. 选择 Buildkite 管道,选择 “设置”,然后选择 “步骤”,打开 Buildkite 工作流步骤页面。

    如果您还没有,请选择 “转换为 YAML 步骤”。

    用于更新 YAML 的步骤。
  2. 您至少需要指定一个引用管道名称的 Buildkite 代理标签。 CodeBuild 需要项目名称才能将 Buildkite 任务的 AWS相关设置链接到特定 CodeBuild 项目。通过在 YAML 中包含项目名称 CodeBuild ,可以调用具有正确项目设置的任务。

    agents: project: "codebuild-<project name>"

    以下是仅具有项目标注标签的 Buildkite 管道步骤的示例:

    agents: project: "codebuild-myProject" steps: - command: "echo \"Hello World\""

    您也可以在标签中覆盖映像和计算类型。有关可用映像的列表,请参阅CodeBuild-hosted Buildkite 运行器支持的计算图像。标签中的计算类型和映像将覆盖项目的环境设置。要覆盖 CodeBuild EC2 或 Lambda 计算版本的环境设置,请使用以下语法:

    agents: project: "codebuild-<project name>" image: "<environment-type>-<image-identifier>" instance-size: "<instance-size>"

    以下是具有映像和实例大小覆盖的 Buildkite 管道步骤的示例:

    agents: project: "codebuild-myProject" image: "arm-3.0" instance-size: "small" steps: - command: "echo \"Hello World\""

    您可以在标签中覆盖构建所用的实例集。这将覆盖在您的项目中配置的实例集设置,以便使用指定的实例集。有关更多信息,请参阅在预留容量实例集上运行构建

    要覆盖 Amazon EC2 计算构建的实例集设置,请使用以下语法:

    agents: project: "codebuild-<project name>" fleet: "<fleet-name>"

    要同时覆盖构建所用的实例集和映像,请使用以下语法:

    agents: project: "codebuild-<project name>" fleet: "<fleet-name>" image: "<environment-type>-<image-identifier>"

    以下是具有实例集和映像覆盖的 Buildkite 管道步骤的示例:

    agents: project: "codebuild-myProject" fleet: "myFleet" image: "arm-3.0" steps: - command: "echo \"Hello World\""
  3. 您可以选择在自托管 Buildkite 运行程序构建期间运行内联 buildspec 命令(有关更多详细信息,请参阅对于 INSTALL、PRE_BUILD 和 POST_BUILD 阶段运行 buildspec 命令)。要指定 CodeBuild 编译版本应在 Buildkite 自托管运行器构建期间运行 buildspec 命令,请使用以下语法:

    agents: project: "codebuild-<project name>" buildspec-override: "true"

    以下是具有 buildspec 覆盖的 Buildkite 管道的示例:

    agents: project: "codebuild-myProject" buildspec-override: "true" steps: - command: "echo \"Hello World\""
  4. 或者,您可以在 CodeBuild 支持的标签之外提供标签。在覆盖构建的属性时会忽略这些标签,但不会导致 webhook 请求失败。例如,添加 myLabel: "testLabel" 作为标签不会阻止构建运行。

第 5 步:查看结果

每当你的管道中启动 Buildkite 任务时, CodeBuild 都会通过 Buildkite webhook 收到一个 job.scheduled webhook 事件。对于你的 Buildkite 版本中的每项任务,都 CodeBuild 将开始构建,运行一个临时的 Buildkite 运行器。该运行程序负责执行单个 Buildkite 作业。作业完成后,运行器和关联的构建过程会立即终止。

要查看工作流程作业日志,请导航到 Buildkite 管道并选择最新的构建(您可以通过选择新构建来触发新的构建。每项任务的关联 CodeBuild 编译启动并完成任务后,您应该会在 Buildkite 控制台中看到该任务的日志

查看结果。

针对私有存储库对 Buildkite 进行身份验证

如果您在 Buildkite 管道中配置了私有存储库,则 Buildkite 需要构建环境中的额外权限才能提取存储库,因为 Buildkite 不会向自托管运行程序提供凭证以从私有存储库中进行提取。要针对外部私有源存储库对 Buildkite 自托管运行程序代理进行身份验证,可以使用以下选项之一。

使用进行身份验证 CodeBuild

CodeBuild 为支持的源类型提供托管凭证处理。要使用 CodeBuild 源证书提取作业的源存储库,可以使用以下步骤:

  1. 在 CodeBuild 控制台中,导航到编辑项目或使用中的步骤创建新 CodeBuild 项目第 2 步:使用 webhook 创建 CodeBuild 项目

  2. Buildkite 源凭证选项下,选择作业的源存储库提供商。

    1. 如果您想使用账户级别的 CodeBuild 凭证,请验证其配置是否正确。此外,如果您的项目配置了内联 buildspec,请验证是否启用了 git-credential-helper

    2. 如果您想使用项目级 CodeBuild 证书,请选择 “仅对此项目使用替代证书”,然后为您的项目设置证书。

  3. 在 Buildkite 管道设置中,导航到存储库设置。将源存储库签出设置设为使用 HTTPS 签出

    查看结果。
使用 Buildkite 密钥进行身份验证

Buildkite 维护一个 ssh-checkout 插件,该插件可用于使用 ssh 密钥针对外部源存储库对自托管运行程序进行身份验证。密钥值存储为 Buildkite 密钥,并在尝试提取私有存储库时由 Buildkite 自托管运行程序代理自动获取。要为 Buildkite 管道配置 ssh-checkout 插件,可以使用以下步骤:

  1. 使用您的电子邮件地址生成私有和公有 ssh 密钥,例如 ssh-keygen -t rsa -b 4096 -C "myEmail@address.com"

  2. 将公有密钥添加到私有源存储库。例如,您可以按照本指南向 GitHub 账户添加密钥。

  3. 向 Buildkite 集群添加一个新的 SSH 密钥。在 Buildkite 集群中,选择密钥新密钥。在密钥字段中为您的密钥添加名称,然后将私有 SSH 密钥添加到字段中:

    查看结果。
  4. 在 Buildkite 管道中,导航到存储库设置并将签出设置为使用 SSH

    查看结果。
  5. 更新管道 YAML 步骤以使用 git-ssh-checkout 插件。例如,以下管道 YAML 文件使用带有上述 Buildkite 秘密密钥的签出操作:

    agents: project: "codebuild-myProject" steps: - command: "npm run build" plugins: - git-ssh-checkout#v0.4.1: ssh-secret-key-name: 'SOURCE_SSH_KEY'
  6. 在其中运行 Buildkite 自托管运行器作业时 CodeBuild,Buildkite 现在将在提取私有存储库时自动使用您配置的密钥值

运行程序配置选项

您可以在项目配置中指定以下环境变量,以修改自托管运行程序的设置配置:

  • CODEBUILD_CONFIG_BUILDKITE_AGENT_TOKEN: CodeBuild 将从 AWS Secrets Manager 中获取配置为该环境变量值的密钥值,以便注册 Buildkite 自托管运行器代理。此环境变量的类型必须为 SECRETS_MANAGER,其值应是您在 Secrets Manager 中的密钥名称。所有 Buildkite 运行程序项目都需要一个 Buildkite 代理令牌环境变量。

  • CODEBUILD_CONFIG_BUILDKITE_CREDENTIAL_DISABLE:默认情况下, CodeBuild会将账户或项目级别的源凭证加载到构建环境中,因为 Buildkite 代理使用这些证书来提取作业的源存储库。要禁用此行为,您可以将此环境变量添加到项目中,值设置为 true,这将防止源凭证加载到构建环境中。