教程:配置 CodeBuild 托管的 Buildkite 运行程序
本教程演示了如何配置 CodeBuild 项目来运行 Buildkite 作业。有关将 Buildkite 与 CodeBuild 结合使用的更多信息,请参阅 AWS CodeBuild 中自行管理的 Buildkite 运行程序。
要完成本教程,您首先必须:
-
可以访问 Buildkite 组织。有关设置 Buildkite 账户和组织的更多信息,您可以关注此 Getting Started Tutorial
。 -
创建配置为使用自托管运行程序的 Buildkite 管道、集群和队列。有关设置这些资源的更多信息,可以参考 Buildkite Pipeline Setup Tutorial
。
步骤 1:生成 Buildkite 代理令牌
在此步骤中,您将在 Buildkite 中生成一个代理令牌,该令牌将用于对 CodeBuild 自托管运行程序进行身份验证。有关此资源的更多信息,请参阅 Buildkite Agent Tokens
生成 Buildkite 代理令牌
-
在 Buildkite 集群中,选择代理令牌,然后选择新建令牌。
-
向令牌添加描述,然后单击创建令牌。
-
保存代理令牌值,以便稍后在 CodeBuild 项目设置过程中使用该值。
步骤 2:创建带有 webhook 的 CodeBuild 项目
创建带有 webhook 的 CodeBuild 项目
从 https://console.aws.amazon.com/codesuite/codebuild/home
打开 AWS CodeBuild 控制台。 -
创建自托管构建项目。有关信息,请参阅创建构建项目(控制台)和运行构建(控制台)。
-
在项目配置中,选择运行程序项目。在运行程序中:
-
对于运行程序提供商,选择 Buildkite。
-
对于 Buildkite 代理令牌,选择使用创建密钥页面创建新的代理令牌。系统将提示您在 AWS Secrets Manager 中创建一个新密钥,密钥值等于您在上面生成的 Buildkite 代理令牌。
-
(可选)如果您想在作业中使用 CodeBuild 托管式凭证,请在 Buildkite 源凭证选项下选择作业的源存储库提供商,并验证是否已为您的账户配置了凭证。此外,请验证 Buildkite 管道是否采用使用 HTTPS 签出。
注意
Buildkite 需要构建环境中的源凭证才能提取作业的源。有关可用的源凭证选项,请参阅针对私有存储库对 Buildkite 进行身份验证。
-
-
(可选)在环境中:
-
选择支持的环境映像和计算。
请注意,您可以选择在 Buildkite YAML 步骤中使用标签来覆盖映像和实例设置。有关更多信息,请参阅 步骤 4:更新 Buildkite 管道步骤。
-
-
(可选)在 Buildspec 中:
-
除非将
buildspec-override: "true"添加为标签,否则系统默认情况下会忽略 buildspec。相反,CodeBuild 将覆盖它,以便使用特定命令来设置自托管运行器。注意
CodeBuild 对于 Buildkite 自托管运行程序构建不支持 buildspec 文件。对于内联 buildspec,如果您已配置了 CodeBuild 托管式源凭证,则需要在 buildspec 中启用 git-credential-helper
-
-
-
继续使用默认值,然后选择创建构建项目。
-
保存创建 webhook 弹出窗口中的有效载荷 URL 和密钥值。要么按照弹出窗口中的说明创建新的 Buildkite 组织 webhook,要么继续下一节。
步骤 3:在 Buildkite 中创建 CodeBuild webhook
在此步骤中,您将使用 CodeBuild webhook 中的有效载荷 URL 和密钥值在 Buildkite 中创建一个新的 webhook。当有效的 Buildkite 作业启动时,此 webhook 将用于在 CodeBuild 中触发构建。
在 Buildkite 中创建新的 webhook
-
导航到 Buildkite 组织的设置页面。
-
在集成下,选择通知服务。
-
选择 Webhook 框旁边的添加。在添加 Webhook 通知页面中,使用以下配置:
-
在 Webhook URL 下,添加保存的有效载荷 URL 值。
-
在令牌下,验证选择了将令牌作为 X-Buildkite-Token 发送。将 webhook 密钥值添加到令牌字段。
-
在“令牌”下,验证选择了将令牌作为 X-Buildkite-Token 发送。将 webhook 密钥值添加到令牌字段。
-
在事件下,选择
job.scheduledwebhook 事件。 -
(可选)在管道下,您可以选择仅触发特定管道的构建。
-
-
选择添加 Webhook 通知。
步骤 4:更新 Buildkite 管道步骤
在此步骤中,您将更新 Buildkite 管道的步骤,以便添加必要的标签和可选的覆盖。有关支持的标签覆盖的完整列表,请参阅CodeBuild 托管的 Buildkite 运行程序支持的标签覆盖。
更新管道步骤
-
通过选择 Buildkite 管道,选择设置,然后选择步骤,导航到 Buildkite 管道步骤页面。
如果您尚未选择,请选择转换为 YAML 步骤。
-
您至少需要指定一个 Buildkite 代理标签
,该标签引用 CodeBuild 管道的名称。需要项目名称才能将 Buildkite 作业的 AWS 相关设置链接到特定 CodeBuild 项目。通过在 YAML 中包括项目名称,CodeBuild 可以调用具有正确项目设置的作业。 agents: project: "codebuild-<project name>"以下是仅具有项目标注标签的 Buildkite 管道步骤的示例:
agents: project: "codebuild-myProject" steps: - command: "echo \"Hello World\""您也可以在标签中覆盖映像和计算类型。有关可用映像的列表,请参阅CodeBuild 托管的 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\"" -
您可以选择在自托管 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\"" -
(可选)您可以提供 CodeBuild 支持的标签以外的其他标签。在覆盖构建的属性时会忽略这些标签,但不会导致 webhook 请求失败。例如,添加
myLabel: “testLabel"作为标签不会阻止构建运行。
步骤 5:检查您的结果
只要在管道中启动 Buildkite 作业,CodeBuild 就将通过 Buildkite webhook 收到一个 job.scheduled webhook 事件。对于 Buildkite 构建中的每个作业,CodeBuild 都会启动一个构建来运行临时 Buildkite 运行程序。该运行程序负责执行单个 Buildkite 作业。作业完成后,运行器和关联的构建过程会立即终止。
要查看工作流程作业日志,请导航到 Buildkite 管道并选择最新的构建(您可以通过选择新构建来触发新的构建。每个作业的关联 CodeBuild 构建启动并承担作业后,您应该可以在 Buildkite 控制台中看到该作业的日志
针对私有存储库对 Buildkite 进行身份验证
如果您在 Buildkite 管道中配置了私有存储库,则 Buildkite 需要构建环境中的额外权限
使用 CodeBuild 进行身份验证
CodeBuild 为支持的源类型提供托管式凭证处理。要使用 CodeBuild 源凭证提取作业的源存储库,您可以使用以下步骤:
-
在 CodeBuild 控制台中,导航到编辑项目,或使用步骤 2:创建带有 webhook 的 CodeBuild 项目中的步骤创建新的 CodeBuild 项目。
-
在 Buildkite 源凭证选项下,选择作业的源存储库提供商。
-
如果您想使用账户级别 CodeBuild 凭证,请验证这些凭证是否配置正确。此外,如果您的项目配置了内联 buildspec,请验证是否启用了 git-credential-helper。
-
如果您想使用项目级别 CodeBuild 凭证,请选择仅为此项目使用覆盖凭证,然后为您的项目设置凭证。
-
-
在 Buildkite 管道设置中,导航到存储库设置。将源存储库签出设置设为使用 HTTPS 签出
使用 Buildkite 密钥进行身份验证
Buildkite 维护一个 ssh-checkout 插件
-
使用您的电子邮件地址生成私有和公有 ssh 密钥,例如
ssh-keygen -t rsa -b 4096 -C "myEmail@address.com" -
将公有密钥添加到私有源存储库。例如,您可以按照本指南
向 GitHub 账户添加密钥。 -
向 Buildkite 集群添加一个新的 SSH 密钥
。在 Buildkite 集群中,选择密钥 → 新密钥。在密钥字段中为您的密钥添加名称,然后将私有 SSH 密钥添加到值字段中:
-
在 Buildkite 管道中,导航到存储库设置并将签出设置为使用 SSH。
-
更新管道 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' -
在 CodeBuild 中运行 Buildkite 自托管运行程序作业时,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,这将防止源凭证加载到构建环境中。