

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

# CodeBuild-hosted GitHub 操作运行器支持标签覆盖
<a name="sample-github-action-runners-update-labels"></a>

在您的 Act GitHub ions 工作流程 YAML 中，您可以提供各种标签替代来修改您的自托管运行器构建。任何未被识别的版本都 CodeBuild 将被忽略，但不会使您的 webhook 请求失败。以下工作流程 YAML 定义了两个任务：对图像、实例大小、队列和构建规范`job1`使用替代，并且仅`job2`使用图像覆盖。为每个任务指定一个唯一的标签（`job1`和`job2`），以便将每个任务 GitHub 路由到为其创建的运行器：

```
name: Hello World
on: [push]
jobs:
  job1:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
      - image:arm-3.0
      - instance-size:small
      - fleet:myFleet
      - buildspec-override:true
      - job1
    steps:
      - run: echo "Hello from Job 1!"
  job2:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
      - image:linux-5.0
      - job2
    steps:
      - run: echo "Hello from Job 2!"
```

您还可以使用矩阵策略在多个配置中运行单个作业。单个矩阵作业的扩展总是有相同数量的标签，因此运行器匹配问题不会影响它们。但是，如果工作流程运行包含多个矩阵作业，则为每个矩阵作业指定其唯一的自定义标签（例如，`matrix-job-1`和`matrix-job-2`），这样就 GitHub 不会将作业与为不同的矩阵作业创建的运行器进行匹配：

```
name: Hello World
on: [push]
jobs:
  Hello-World-Job:
    runs-on:
      - codebuild-myProject-${{ github.run_id }}-${{ github.run_attempt }}
      - image:${{ matrix.os }}
      - instance-size:${{ matrix.size }}
      - fleet:myFleet
      - buildspec-override:true
      - matrix-job-1
    strategy:
      matrix:
        include:
          - os: arm-3.0
            size: small
          - os: linux-5.0
            size: large
    steps:
      - run: echo "Hello World!"
```

**注意**  
如果您的工作流程任务处于挂起 GitHub状态，请参阅[排查 webhook 的问题](action-runner-troubleshoot-webhook.md)和[使用自定义标签路由任务](https://docs.github.com/en/enterprise-server@3.12/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow?learn=hosting_your_own_runners&learnProduct=actions#using-custom-labels-to-route-jobs)。

`codebuild-{{<project-name>}}-${{github.run_id}}-${{github.run_attempt}}`（必需）
+ 示例：`codebuild-fake-project-${{ github.run_id }}-${{ github.run_attempt }}`
+ 所有 Act GitHub ions 工作流程 YAML 均为必填项。{{<project name>}}应等于配置自托管运行器 webhook 的项目的名称。

`image:{{<environment-type>}}-{{<image-identifier>}}`
+ 示例：`image:arm-3.0`
+ 覆盖在通过精选映像启动自托管运行程序构建时使用的映像和环境类型。要了解支持的值，请参阅[计算 CodeBuild-hosted GitHub 操作运行器支持的图像](sample-github-action-runners-update-yaml.images.md)。
  + 要覆盖与自定义映像结合使用的映像和环境类型，请使用 `image:custom-{{<environment-type>}}-{{<custom-image-identifier>}}`
  + 示例：`image:custom-arm-public.ecr.aws/codebuild/amazonlinux-aarch64-standard:3.0`
**注意**  
如果自定义映像位于私有注册表中，请参阅[为自托管运行程序配置私有注册表凭证](private-registry-sample-configure-runners.md)。

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

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

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

`{{<unique-label>}}`（建议在工作流程运行中有多个任务时使用）
+ 示例：`job1`
+ 您定义的自定义标签，同一工作流程运行中的其他作业均不使用该标签。为每个作业分配一个唯一的标签可确保将每个作业仅 GitHub 路由到为其创建的运行器。如果没有它，当同一工作流程运行中的作业具有不同的标签覆盖次数时，为具有更多标签的作业创建的运行器可以选择标签较少的作业，从而使第二个作业没有运行器。有关更多信息，请参阅 [排查 webhook 的问题](action-runner-troubleshoot-webhook.md)。

## 单一标签覆盖
<a name="sample-github-action-runners-update-single-labels"></a>

CodeBuild 允许您使用以下方法在单个标签中提供多个覆盖：

**注意**  
由于所有替代都合并为一个标签，因此每个作业的运行器只注册一个标签。这意味着，即使每个作业没有唯一的标签，这种格式也[排查 webhook 的问题](action-runner-troubleshoot-webhook.md)不会出现中描述的多任务运行器匹配问题。如果您更喜欢这种行为并且您的作业只需要其支持的替换，请使用单标签格式。当你需要它不支持的替代时，不要使用它。例如，只能使用`image:custom-{{<environment-type>}}-{{<custom-image-identifier>}}`标签格式来指定自定义镜像（包括私有注册表中的镜像）。对于这些替代，请使用本主题前面描述的单独标签格式。
+ 要覆盖 Amazon EC2/Lambda 计算版本的环境设置，请使用以下语法：

  ```
  runs-on: codebuild-{{<project-name>}}-${{ github.run_id }}-${{ github.run_attempt }}-{{<environment-type>}}-{{<image-identifier>}}-{{<instance-size>}}
  ```
+ 要覆盖 Amazon EC2 计算构建的实例集设置，请使用以下语法：

  ```
  runs-on: codebuild-{{<project-name>}}-${{ github.run_id }}-${{ github.run_attempt }}-fleet-{{<fleet-name>}}
  ```
+ 要同时覆盖构建所用的实例集和映像，请使用以下语法：

  ```
  runs-on: codebuild-{{<project-name>}}-${{ github.run_id }}-${{ github.run_attempt }}-{{image}}-{{<image-version>}}-fleet-{{<fleet-name>}}
  ```
+ 要在构建期间运行 buildspec 命令，可以将 `-with-buildspec` 作为后缀添加到标签中：

  ```
  runs-on: codebuild-{{<project-name>}}-${{ github.run_id }}-${{ github.run_attempt }}-{{<image>}}-{{<image-version>}}-{{<instance-size>}}-with-buildspec
  ```
+ 或者，您也可以提供实例大小覆盖，而不覆盖映像。对于 Amazon EC2 构建，您可以排除环境类型和映像标识符。对于 Lambda 构建，您可以排除映像标识符。