

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

# 自我管理的 Buildkite 运行器进来了 AWS CodeBuild
<a name="buildkite-runner"></a>

你可以将项目配置为在 CodeBuild 容器中设置自托管的 Buildkite 运行器来处理你的 Buildkite 作业。这可以通过使用您的 CodeBuild项目设置 webhook，然后更新 Buildkite 管道 YAML 步骤以使用托管在计算机上的自托管运行器来完成。 CodeBuild 

配置 CodeBuild 项目以运行 Buildkite 作业的高级步骤如下：
+ 导航到 CodeBuild 控制台并使用 Buildkite 运行器项目运行器类型配置创建项目 CodeBuild 
+ 向 Buildkite 组织添加 `job.scheduled` webhook。
+ 在 Buildkite 中更新 Buildkite 管道 YAML 步骤，以配置构建环境。

有关更详细的过程，请参阅[教程：配置 CodeBuild托管的 Buildkite 运行器](sample-runner-buildkite.md)。此功能允许您的 Buildkite 任务与之进行原生集成 AWS，从而通过 IAM、、和 Amazon VPC 等功能提供安全性和便利性。 AWS Secrets Manager AWS CloudTrail您可以访问最新的实例类型，包括基于 ARM 的实例。

# 关于 CodeBuild托管的 Buildkite 运行器
<a name="buildkite-runner-about"></a>

以下是有关 CodeBuild托管的 Buildkite 运行器的一些常见问题。

## 我应该何时在标签中包括映像和实例覆盖？
<a name="buildkite-runner-about-overrides"></a>

您可以在标签中包括映像和实例覆盖，以便为每个 Buildkite 作业指定不同的构建环境。无需创建多个 CodeBuild 项目或 webhook 即可完成此操作。例如，当您需要[为 Buildkite 作业使用矩阵](https://buildkite.com/docs/pipelines/configure/workflows/build-matrix)时，这很有用。

```
agents:
  queue: "myQueue"
steps:
  - command: "echo \"Hello World\""
    agents:
      project: "codebuild-myProject"
      image: "{{matrix.os}}"
      instance-size: "{{matrix.size}}"
    matrix:
      setup:
        os:
          - "arm-3.0"
          - "al2-5.0"
        size:
          - "small"
          - "large"
```

## 能否在 Buildkite 中自动 CodeBuild 创建 web 挂钩？
<a name="buildkite-runner-about-auto-create"></a>

目前，Buildkite 要求所有 webhook 都使用其控制台手动创建。您可以按照[教程：配置 CodeBuild托管的 Buildkite 运行器](sample-runner-buildkite.md)中的教程在 Buildkite 控制台中手动创建 Buildkite webhook。

## 我可以用它 CloudFormation 来创建 Buildkite 网络挂钩吗？
<a name="buildkite-runner-about-cloudformation"></a>

CloudFormation Buildkite 运行器 webhook 目前不支持，因为 Buildkite 要求使用其控制台手动创建 webhook。

## 哪些区域支持使用 CodeBuild托管的 Buildkite 运行器？
<a name="buildkite-runner-about-regions"></a>

CodeBuild所有区域都支持托管的 Buildkite 运行器。 CodeBuild 有关可用 AWS 区域的更多信息，请参阅[按地区划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。 CodeBuild 

# 教程：配置 CodeBuild托管的 Buildkite 运行器
<a name="sample-runner-buildkite"></a>

本教程向您展示如何配置 CodeBuild 项目以运行 Buildkite 作业。有关将 Buildkite 与配合 CodeBuild 使用的更多信息，请参阅。[自我管理的 Buildkite 运行器进来了 AWS CodeBuild](buildkite-runner.md)<a name="sample-runner-buildkite-prerequisites"></a>

要完成本教程，您首先必须：
+ 可以访问 Buildkite 组织。有关设置 Buildkite 账户和组织的更多信息，您可以关注此 [Getting Started Tutorial](https://buildkite.com/docs/pipelines/getting-started)。
+ 创建配置为使用自托管运行程序的 Buildkite 管道、集群和队列。有关设置这些资源的更多信息，可以参考 [Buildkite Pipeline Setup Tutorial](https://buildkite.com/docs/pipelines/create-your-own)。  
![\[在 Buildkite 中构建项目\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-first.png)

## 步骤 1：生成 Buildkite 代理令牌
<a name="w2aac26c33c12c13b7"></a>

在此步骤中，您将在 Buildkite 中生成代理令牌，该令牌将用于对 CodeBuild 自托管运行器进行身份验证。有关此资源的更多信息，请参阅 [Buildkite Agent Tokens](https://buildkite.com/docs/agent/v3/tokens)。

**生成 Buildkite 代理令牌**

1. 在 Buildkite 集群中，选择**代理令牌**，然后选择**新建令牌**。

1. 向令牌添加描述，然后单击**创建令牌**。

1. 保存代理令牌值，以便稍后在 CodeBuild 项目设置过程中使用该值。  
![\[Buildkite 中的代理令牌\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-createtoken.png)

## 第 2 步：使用 webhook 创建 CodeBuild 项目
<a name="sample-runner-buildkite-create-project"></a>

**使用 webhook 创建 CodeBuild 项目**

1. 在 [https://console.aws.amazon.com/codesuite/codebuild](https://console.aws.amazon.com/codesuite/codebuild/home) /home 中打开 AWS CodeBuild 控制台。

1. 创建自托管构建项目。有关更多信息，请参阅 [创建构建项目（控制台）](create-project.md#create-project-console) 和 [运行构建（控制台）](run-build-console.md)。
   +  在**项目配置**中，选择**运行程序项目**。在**运行程序**中：
     +  对于**运行程序提供商**，选择 **Buildkite**。
     + 对于 **Buildkite 代理令牌**，选择**使用创建密钥页面创建新的代理令牌**。系统将提示您在中 AWS Secrets Manager 创建一个新的密钥，其密钥值等于您在上面生成的 Buildkite 代理令牌。
     + （可选）如果您想为作业使用 CodeBuild 托管证书，请在 **Buildkite 来源凭据选项下选择作业的源**存储库提供商，并验证是否已为您的账户配置了凭据。此外，请验证 Buildkite 管道是否采用**使用 HTTPS 签出**。
**注意**  
Buildkite 需要构建环境中的源凭证才能提取作业的源。有关可用的源凭证选项，请参阅[针对私有存储库对 Buildkite 进行身份验证](#sample-runner-buildkite-config)。
   + （可选）在**环境**中：
     + 选择支持的**环境映像**和**计算**。

       请注意，您可以选择在 Buildkite YAML 步骤中使用标签来覆盖映像和实例设置。有关更多信息，请参阅 [步骤 4：更新 Buildkite 管道步骤](#sample-runner-buildkite-update-pipeline)。
   + （可选）在 **Buildspec** 中：
     + 除非将 `buildspec-override: "true"` 添加为标签，否则系统默认情况下会忽略 buildspec。相反， CodeBuild 将覆盖它以使用设置自托管运行器的命令。
**注意**  
CodeBuild 不支持 Buildkite 自托管运行器版本的 buildspec 文件。对于内联构建规范，如果您已配置 CodeBuild 托管源凭据，则需要[ git-credential-helper](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.env.git-credential-helper)在构建规范中启用

1. 继续使用默认值，然后选择**创建构建项目**。

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

## 第 3 步：在 Buildkite 中创建一个 CodeBuild webhook
<a name="sample-runner-buildkite-codebuild-webhook"></a>

在此步骤中，您将使用 CodeBuild webhook 中的**有效负载 URL** 和 S **ecret** 值在 Buildkite 中创建一个新的 webhook。此 webhook 将用于在有效的 Buildkite 作业启动 CodeBuild 时触发构建。

**在 Buildkite 中创建新的 webhook**

1. 导航到 Buildkite 组织的**设置**页面。

1. 在**集成**下，选择**通知服务**。

1. 选择 **Webhook** 框旁边的**添加**。在**添加 Webhook 通知**页面中，使用以下配置：

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

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

   1. 在下方，确认选**中了按原样 X-Buildkite-Token发送令牌**。将 webhook **密钥**值添加到**令牌**字段。

   1. 在**事件**下，选择 `job.scheduled` webhook 事件。

   1. （可选）在**管道**下，您可以选择仅触发特定管道的构建。

1. 选择**添加 Webhook 通知**。

## 步骤 4：更新 Buildkite 管道步骤
<a name="sample-runner-buildkite-update-pipeline"></a>

在此步骤中，您将更新 Buildkite 管道的步骤，以便添加必要的标签和可选的覆盖。有关支持的标签覆盖的完整列表，请参阅[CodeBuild托管的 Buildkite 运行器支持的标签覆盖](buildkite-runner-update-labels.md)。

**更新管道步骤**

1. 通过选择 Buildkite 管道，选择**设置**，然后选择**步骤**，导航到 Buildkite 管道步骤页面。

   如果您尚未选择，请选择**转换为 YAML 步骤**。  
![\[用于更新 YAML 的步骤。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-steps.png)

1. 您至少需要指定一个引用管道名称的 [Buildkite 代理标签](https://buildkite.com/docs/agent/v3/cli-start#agent-targeting)。 CodeBuild 需要项目名称才能将 Buildkite 作业的 AWS相关设置链接到特定 CodeBuild 项目。通过在 YAML 中包含项目名称 CodeBuild ，可以调用具有正确项目设置的作业。

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

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

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

   您也可以在标签中覆盖映像和计算类型。有关可用映像的列表，请参阅[计算 CodeBuild托管的 Buildkite 运行器支持的图像](buildkite-runner-update-yaml.images.md)。标签中的计算类型和映像将覆盖项目的环境设置。要替换 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\""
   ```

   您可以在标签中覆盖构建所用的实例集。这将覆盖在您的项目中配置的实例集设置，以便使用指定的实例集。有关更多信息，请参阅[在预留容量实例集上运行构建](https://docs.aws.amazon.com/codebuild/latest/userguide/fleets.html)。

   要覆盖 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\""
   ```

1. 您可以选择在自托管 Buildkite 运行程序构建期间运行内联 buildspec 命令（有关更多详细信息，请参阅[对于 INSTALL、PRE\$1BUILD 和 POST\$1BUILD 阶段运行 buildspec 命令](sample-runner-buildkite-buildspec.md)）。要指定该 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\""
   ```

1. 或者，您可以在 CodeBuild 支持的标签之外提供标签。在覆盖构建的属性时会忽略这些标签，但不会导致 webhook 请求失败。例如，添加 `myLabel: “testLabel"` 作为标签不会阻止构建运行。

## 第 5 步：查看您的结果
<a name="sample-runner-buildkite-verify"></a>

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

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

![\[查看结果。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-log.png)


## 针对私有存储库对 Buildkite 进行身份验证
<a name="sample-runner-buildkite-config"></a>

如果您在 Buildkite 管道中配置了私有存储库，则 Buildkite 需要[构建环境中的额外权限](https://buildkite.com/docs/agent/v3/github-ssh-keys)才能提取存储库，因为 Buildkite 不会向自托管运行程序提供凭证以从私有存储库中进行提取。要针对外部私有源存储库对 Buildkite 自托管运行程序代理进行身份验证，可以使用以下选项之一。

**要使用进行身份验证 CodeBuild**

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

1. 在 CodeBuild 控制台中，导航到**编辑项目**或使用中的步骤创建新 CodeBuild 项目[第 2 步：使用 webhook 创建 CodeBuild 项目](#sample-runner-buildkite-create-project)。

1. 在 **Buildkite 源凭证选项**下，选择作业的源存储库提供商。

   1. 如果您想使用账户级 CodeBuild 凭证，请验证其配置是否正确。此外，如果您的项目配置了内联构建规范，请验证[ git-credential-helper](https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.env.git-credential-helper)是否已启用。

   1. 如果您想使用项目级别的 CodeBuild 凭据，请选择 “**仅为此项目使用覆盖凭据**”，然后为您的项目设置凭据。

1. 在 Buildkite 管道设置中，导航到**存储库设置**。将源存储库签出设置设为**使用 HTTPS 签出**  
![\[查看结果。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-repo-https.png)

**使用 Buildkite 密钥进行身份验证**

Buildkite 维护一个 [ssh-checkout 插件](https://github.com/buildkite-plugins/git-ssh-checkout-buildkite-plugin)，该插件可用于使用 ssh 密钥针对外部源存储库对自托管运行程序进行身份验证。密钥值存储为 [Buildkite 密钥](https://buildkite.com/docs/pipelines/security/secrets/buildkite-secrets)，并在尝试提取私有存储库时由 Buildkite 自托管运行程序代理自动获取。要为 Buildkite 管道配置 ssh-checkout 插件，可以使用以下步骤：

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

1. 将公有密钥添加到私有源存储库。例如，您可以按照[本指南](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)为 GitHub 账户添加密钥。

1. 向 Buildkite 集群添加一个[新的 SSH 密钥](https://buildkite.com/docs/pipelines/hosted-agents/code-access#private-repositories-with-other-providers-add-the-ssh-key-secret)。在 Buildkite 集群中，选择**密钥** → **新密钥**。在**密钥**字段中为您的密钥添加名称，然后将私有 SSH 密钥添加到**值**字段中：  
![\[查看结果。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-secret.png)

1. 在 Buildkite 管道中，导航到存储库设置并将签出设置为使用 **SSH**。  
![\[查看结果。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-repo.png)

1. 更新管道 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'
   ```

1. 在其中运行 Buildkite 自托管运行器作业时 CodeBuild，Buildkite 现在将在提取私有存储库时自动使用你配置的密钥值

## 运行程序配置选项
<a name="sample-buildkite-runner-auth"></a>

您可以在项目配置中指定以下环境变量，以修改自托管运行程序的设置配置：
+ `CODEBUILD_CONFIG_BUILDKITE_AGENT_TOKEN`: CodeBuild 将从 AWS Secrets Manager 中获取配置为该环境变量值的秘密值，以便注册 Buildkite 自托管的运行器代理。此环境变量的类型必须为 `SECRETS_MANAGER`，其值应是您在 Secrets Manager 中的密钥名称。所有 Buildkite 运行程序项目都需要一个 Buildkite 代理令牌环境变量。
+ `CODEBUILD_CONFIG_BUILDKITE_CREDENTIAL_DISABLE`: 默认情况下， CodeBuild会将账户或项目级别的源凭据加载到构建环境中，因为 Buildkite 代理使用这些凭据来提取作业的源存储库。要禁用此行为，您可以将此环境变量添加到项目中，值设置为 `true`，这将防止源凭证加载到构建环境中。

# 对于 INSTALL、PRE\$1BUILD 和 POST\$1BUILD 阶段运行 buildspec 命令
<a name="sample-runner-buildkite-buildspec"></a>

默认情况下，在运行自托管 Buildkite 运行器版本时会 CodeBuild 忽略所有 buildspec 命令。要在构建期间中运行 buildspec 命令，

```
buildspec-override: "true"
```

 可作为后缀添加到标签：

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

通过使用此命令， CodeBuild 将在容器的主源文件夹`buildkite-runner`中创建一个名为的文件夹。当 Buildkite 运行程序在 `BUILD` 阶段启动时，运行程序将在 `buildkite-runner` 目录中运行。

在自托管 Buildkite 构建中使用 buildspec 覆盖具有若干限制：
+ Buildkite 代理要求构建环境中存在源凭证才能提取作业的源存储库。如果您使用 CodeBuild 源证书进行身份验证，则需要在 buildspec `git-credential-helper` 中启用。例如，可以使用以下 buildspec 为 Buildkite 构建启用 `git-credential-helper`：

  ```
  version: 0.2
  env:
    git-credential-helper: yes
  phases:
    pre_build:
      commands:
         - echo "Hello World"
  ```
+ CodeBuild 在此`BUILD`阶段不会运行 buildspec 命令，因为自托管运行器将在该`BUILD`阶段运行。
+ CodeBuild 不支持 Buildkite 运行器版本的 buildspec 文件。Buildlkite 自托管运行程序仅支持内联 buildspec
+ 如果构建命令在`PRE_BUILD`或`INSTALL`阶段失败， CodeBuild 则无法启动自托管运行器，并且需要手动取消 Buildkite 作业。

# 以编程方式设置 Buildkite 运行程序
<a name="sample-runner-buildkite-CLI"></a>

为了以编程方式配置 Buildkite 运行程序项目，您将需要配置以下资源：

**以编程方式创建 Buildkite 运行程序**

1. 创建 Buildkite 代理令牌并将该令牌以纯文本形式保存在 AWS Secrets Manager中。

1. 使用您的首选配置设置 CodeBuild 项目。您需要配置以下额外的属性：

   1. 一个环境值，其名称为 `CODEBUILD_CONFIG_BUILDKITE_AGENT_TOKEN`、类型为 `SECRETS_MANAGER`，而值等于与 Buildkite 集群关联的 Buildkite 代理令牌。

   1. 等于 `NO_SOURCE` 的源类型

   1. 以项目的服务角色访问在步骤 1 中创建的密钥的权限

   例如，您可以通过 CLI 使用以下命令创建有效的 Buildkite 运行程序项目：

   ```
   aws codebuild create-project \
   --name buildkite-runner-project \
   --source "{\"type\": \"NO_SOURCE\",\"buildspec\":\"\"}" \
   --environment "{\"image\":\"aws/codebuild/amazonlinux-x86_64-standard:5.0\",\"type\":\"LINUX_CONTAINER\",\"computeType\":\"BUILD_GENERAL1_MEDIUM\",\"environmentVariables\":[{\"name\":\"CODEBUILD_CONFIG_BUILDKITE_AGENT_TOKEN\",\"type\":\"SECRETS_MANAGER\",\"value\":\"<buildkite-secret-name>\"}]}" \
   --artifacts "{\"type\": \"NO_ARTIFACTS\"}" \
   --service-role <service-role>
   ```

1. 在步骤 2 中创建的项目上创建 Buildkite 运行程序 webhook。创建 webhook 时，您需要使用以下配置选项：

   1. **build-type** 应等于 `RUNNER_BUILDKITE_BUILD`

   1. 类型为 `EVENT` 且模式等于 `WORKFLOW_JOB_QUEUED` 的筛选条件 

   例如，您可以通过 CLI 使用以下命令创建有效的 Buildkite 运行程序 webhook：

   ```
   aws codebuild create-webhook \
   --project-name buildkite-runner-project \
   --filter-groups "[[{\"type\":\"EVENT\",\"pattern\":\"WORKFLOW_JOB_QUEUED\"}]]" \
   --build-type RUNNER_BUILDKITE_BUILD
   ```

1. 保存由 `create-webhook` 调用返回的**有效载荷 URL** 和**密钥**值，然后使用凭证在 Buildkite 控制台中创建 webhook。您可以参考中的步骤 3：在 Buildkite 中创建 CodeBuild webhook，以[教程：配置 CodeBuild托管的 Buildkite 运行器](sample-runner-buildkite.md)获取有关如何设置此资源的指南。

# 针对失败的构建或挂起的作业对 webhook 进行故障排除
<a name="buildkite-runner-troubleshoot-webhook"></a>

 **问题: ** 

您在[教程：配置 CodeBuild托管的 Buildkite 运行器](sample-runner-buildkite.md)中设置的 webhook 无法正常工作，或工作流程作业在 Buildkite 中挂起。

 **可能的原因：**
+ 您的 **job.scheduled** 事件可能无法触发构建。检查**响应**日志以查看响应或错误消息。
+ 在启动 Buildkite 自托管运行器代理来处理你的 CodeBuild 工作之前，你的构建失败了。

 **推荐的解决方案：**

要调试失败的 Buildkite webhook 事件：

1. **在你的 Buildkite 组织设置中，导航到**通知服务**，选择你的 CodeBuild webhook，然后找到请求日志。**

1. 查找与卡住的 Buildkite 作业关联的 `job.scheduled` webhook 事件。可以使用 webhook 有效载荷中的作业 ID 字段将 webhook 事件与 Buildkite 作业相关联。

1. 选择**响应**选项卡并检查响应正文。确认**响应**状态代码为 `200` 且**响应**正文不包含任何意外的消息。  
![\[Webhook 的响应。\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/images/buildkite-request.png)

# 排查 webhook 权限问题
<a name="buildkite-runner-troubleshoot-webhook-permissions"></a>

 **问题: ** 

Buildkite 作业由于权限问题而无法签出作业的源存储库。

 **可能的原因：**
+ CodeBuild 没有足够的权限来查看任务的源存储库。
+ 管道的存储库设置设置为使用 SSH 签出 CodeBuild托管凭据。

 **推荐的解决方案：**
+ 验证是否配置 CodeBuild 了足够的权限来查看作业的源存储库。此外，请验证 CodeBuild 项目的服务角色是否有足够的权限访问配置的源权限选项。
+ 如果您使用的是 CodeBuild 托管源存储库凭据，请确认您的 Buildkite 管道已配置为使用 HTTPS 签出。

# CodeBuild托管的 Buildkite 运行器支持的标签覆盖
<a name="buildkite-runner-update-labels"></a>

在 Buildkite 管道步骤代理标签标注中，您可以提供各种标注覆盖来修改自托管运行程序构建。任何未被识别的版本都 CodeBuild将被忽略，但不会使您的 webhook 请求失败。例如，以下工作流程 YAML 包括映像、实例大小、实例集和 buildspec 的覆盖：

```
agents:
  queue: "myQueue"
steps:
  - command: "echo \"Hello World\""
    agents:
      project: "codebuild-myProject"
      image: "{{matrix.os}}"
      instance-size: "{{matrix.size}}"
      buildspec-override: "true"
    matrix:
      setup:
        os:
          - "arm-3.0"
          - "al2-5.0"
        size:
          - "small"
          - "large"
```

 `project:codebuild-<project-name>`（必需）
+ 示例：`project: "codebuild-myProject"`
+ 所有 Buildkite 工作流步骤配置都是必需的。 *<project name>*应等于为其配置自托管运行器 webhook 的项目的名称。

`queue: "<queue-name>"`
+ 示例：`queue: "<queue-name>"`
+ 用于将 Buildkite 作业路由到特定队列。有关更多信息，请参阅 [Buildkite Agent Queue Tag](https://buildkite.com/docs/agent/v3/cli-start#the-queue-tag)。

 `image: "<environment-type>-<image-identifier>"` 
+ 示例：`image: "arm-3.0"`
+ 覆盖在通过精选映像启动自托管运行程序构建时使用的映像和环境类型。要了解支持的值，请参阅[计算 CodeBuild托管的 Buildkite 运行器支持的图像](buildkite-runner-update-yaml.images.md)。

  1. 要覆盖与自定义映像结合使用的映像和环境类型，请使用 `image: "custom-<environment-type>-<custom-image-identifier>"`

  1. 示例：

     ```
     image:
           "custom-arm-public.ecr.aws/codebuild/amazonlinux-aarch64-standard:3.0"
     ```
**注意**  
如果自定义映像位于私有注册表中，则必须在 CodeBuild 项目中配置相应的注册表凭据。

`instance-size: "<instance-size>"`
+ 示例：`instance-size: "medium"`
+ 覆盖在启动自托管运行器构建时使用的实例类型。要了解支持的值，请参阅[计算 CodeBuild托管的 Buildkite 运行器支持的图像](buildkite-runner-update-yaml.images.md)。

`fleet: "<fleet-name>"`
+ 示例：`fleet: "myFleet"`
+ 覆盖在您的项目中配置的实例集设置，以便使用指定的实例集。有关更多信息，请参阅[在预留容量实例集上运行构建](https://docs.aws.amazon.com/codebuild/latest/userguide/fleets.html)。

`buildspec-override: "<boolean>"`
+ 示例：`buildspec-override: "true"`
+ 如果设置为 `true`，则允许构建以在 `INSTALL`、`PRE_BUILD` 和 `POST_BUILD` 阶段运行 buildspec 命令。

# 计算 CodeBuild托管的 Buildkite 运行器支持的图像
<a name="buildkite-runner-update-yaml.images"></a>

在中配置的标签中[自我管理的 Buildkite 运行器进来了 AWS CodeBuild](buildkite-runner.md)，您可以使用前三列中的值来覆盖您的 Amazon EC2 环境设置。 CodeBuild 提供了以下 Amazon EC2 计算映像。有关 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/buildkite-runner-update-yaml.images.html)

此外，您还可以使用以下值来覆盖 Lambda 环境设置。有关 CodeBuild Lambda 计算的更多信息，请参阅。[在 AWS Lambda 计算基础上运行构建](lambda.md) CodeBuild 支持以下 Lambda 计算映像：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codebuild/latest/userguide/buildkite-runner-update-yaml.images.html)

有关更多信息，请参阅[构建环境计算模式和类型](build-env-ref-compute-types.md)和[提供的 Docker 镜像 CodeBuild](build-env-ref-available.md)。