View a markdown version of this page

CodeBuild-hosted GitHub 操作运行器支持的标签覆盖 - AWS CodeBuild

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

CodeBuild-hosted GitHub 操作运行器支持的标签覆盖

在你的 A GitHub ctions 工作流程 YAML 中,你可以提供各种标签覆盖来修改你的自托管运行器构建。任何未被识别的版本都 CodeBuild 将被忽略,但不会使您的 webhook 请求失败。以下工作流程 YAML 定义了两个任务:对图像、实例大小、队列和 buildspec job1 使用替代,并且仅job2使用图像覆盖。为每个作业指定一个唯一的标签(job1job2),以便将每个作业 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-1matrix-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 的问题使用自定义标签路由作业

codebuild-<project-name>-${{github.run_id}}-${{github.run_attempt}}(必需)

  • 示例:codebuild-fake-project-${{ github.run_id }}-${{ github.run_attempt }}

  • 所有 GitHub 操作工作流程 YAML 均为必填项。 <project name>应等于为其配置自托管运行器 webhook 的项目的名称。

image:<environment-type>-<image-identifier>

instance-size:<instance-size>

fleet:<fleet-name>

buildspec-override:<boolean>

  • 示例:buildspec-override:true

  • 如果设置为 true,则允许构建以在 INSTALLPRE_BUILDPOST_BUILD 阶段运行 buildspec 命令。

<unique-label>(当工作流程运行有多个作业时,建议使用)

  • 示例:job1

  • 您定义的自定义标签,并且在同一工作流程中运行的其他作业都不使用该标签。为每个作业分配一个唯一的标签可确保仅将每个作业 GitHub 路由到为其创建的运行器。如果没有它,当同一工作流程运行中的作业具有不同数量的标签覆盖时,为标签较多的作业创建的运行器可以选择标签较少的作业,从而使第二个作业没有运行器。有关更多信息,请参阅 排查 webhook 的问题

单标签覆盖

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

注意

由于所有重写都合并到一个标签中,因此每个作业的运行器只注册一个标签。这意味着,即使每个作业都没有唯一的标签,这种格式也排查 webhook 的问题不会出现中所述的多任务运行器匹配问题。如果您更喜欢这种行为,并且您的作业只需要它支持的替换,请使用单标签格式。当您需要它不支持的替代项时,请勿使用它。例如,只能使用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 构建,您可以排除映像标识符。