Skip to main content

在较大的运行器上运行作业

可以通过将工作流配置为在 大型运行器 上运行来加速工作流。

谁可以使用此功能?

大型运行器 目前仅对使用 GitHub Team 或 GitHub Enterprise Cloud 计划的组织和企业可用。

Platform navigation

在运行器上运行作业

定义了运行器类型后,可以更新工作流 YAML 文件,以将作业发送到新创建的运行器实例进行处理。 可使用运行器组或标签来定义作业的运行位置。

注意: 系统会自动为 大型运行器 分配对应于运行器名称的默认标签。 无法将自定义标签添加到 大型运行器,但可以使用默认标签或运行器的组将作业发送到特定类型的运行器。

只有所有者或管理员帐户可查看运行器设置。 非管理用户可联系组织所有者,了解启用了哪些运行器。 组织所有者可创建新的运行器和运行器组,并配置权限来指定哪些存储库可访问运行器组。 有关详细信息,请参阅“管理较大的运行器”。

定义了运行器类型后,可以更新工作流 YAML 文件,以将作业发送到新创建的运行器实例进行处理。 可使用运行器组或标签来定义作业的运行位置。

注意: 系统会自动为 大型运行器 分配对应于运行器名称的默认标签。 无法将自定义标签添加到 大型运行器,但可以使用默认标签或运行器的组将作业发送到特定类型的运行器。

只有所有者或管理员帐户可查看运行器设置。 非管理用户可联系组织所有者,了解启用了哪些运行器。 组织所有者可创建新的运行器和运行器组,并配置权限来指定哪些存储库可访问运行器组。 有关详细信息,请参阅“管理较大的运行器”。

定义了运行器类型后,可以更新工作流 YAML 文件,以将作业发送到运行器实例进行处理。 若要在 macOS 大型运行器 上运行作业,请更新工作流 YAML 文件中的密钥 runs-on,以将其中一个 GitHub 定义的标签用于 macOS 运行器。 有关详细信息,请参阅“可用的 macOS 大型运行器”。

可用的 macOS 大型运行器

使用下表中的标签在相应的 macOS 大型运行器 上运行工作流。

运行器大小体系结构处理器 (CPU)内存 (RAM)存储 (SSD)工作流标签
大型Intel1230 GB14 GBmacos-latest-largemacos-12-largemacos-13-largemacos-14-large [latest]、macos-15-large [公共预览版]
XLargearm64 (M1)6(+ 8 GPU 硬件加速)14 GB14 GBmacos-latest-xlargemacos-13-xlargemacos-14-xlarge [latest]、macos-15-xlarge [公共预览版]

注意: 对于 macOS 大型运行器,-latest 运行器标签使用 macOS 12 运行器映像。 对于 macOS Xlarge,-latest 运行器标签使用 macOS 13 运行器映像

查看存储库可用的运行器

如果对存储库具有 repo: write 访问权限,则可以查看存储库可用的运行器列表。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击 “操作”。

    “github/docs”存储库的选项卡的屏幕截图。 “操作”选项卡以橙色边框突出显示。

  3. 在左侧边栏中的“管理”部分下,单击“ 运行器”。****

  4. 查看存储库可用的运行器列表。

  5. (可选)要复制运行器标签以在工作流中使用,请单击运行器右侧的 ,然后单击“复制标签”。****

注意:**** 企业和组织所有者以及拥有“管理组织运行器和运行器组”权限的用户可以从此页面创建运行器。 若要创建新的运行器,请单击运行器列表右上角的“新建运行器”****,将运行器添加到存储库。

有关详细信息,请参阅 “管理较大的运行器”和 “添加自托管的运行器”。

有关自定义组织角色的详细信息,请参阅“关于自定义组织角色”。

使用组来控制作业的运行位置

在此示例中,Ubuntu 运行器已添加到名为 ubuntu-runners 的组中。 runs-on 键将作业发送到 ubuntu-runners 组中的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: 
      group: ubuntu-runners
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

使用组来控制作业的运行位置

在此示例中,Ubuntu 运行器已添加到名为 ubuntu-runners 的组中。 runs-on 键将作业发送到 ubuntu-runners 组中的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: 
      group: ubuntu-runners
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

使用标签来控制作业的运行位置

可以使用语法 runs-on: LABEL 隐式地将标签传递给 runs-on 键。 或者,可以使用 labels 键,如下例所示。

在此示例中, runs-on 密钥将作业发送给已分配 ubuntu-20.04-16core 标签的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      labels: ubuntu-20.04-16core
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

对启用了 Actions 的存储库具有写权限的任何人都可以找到该存储库中可用的运行器的标签。 请参阅“在较大的运行器上运行作业”。

使用标签来控制作业的运行位置

可以使用语法 runs-on: LABEL 隐式地将标签传递给 runs-on 键。 或者,可以使用 labels 键,如下例所示。

在此示例中, runs-on 密钥将作业发送给已分配 windows-2022-16core 标签的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      labels: windows-2022-16core
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

对启用了 Actions 的存储库具有写权限的任何人都可以找到该存储库中可用的运行器的标签。 请参阅“在较大的运行器上运行作业”。

以工作流中的 macOS 大型运行器 为目标

若要在 macOS 大型运行器 上运行工作流,请将 runs-on 密钥的值设置为与 macOS 大型运行器 关联的标签。 有关 macOS 大型运行器 标签的列表,请参阅“可用的 macOS 大型运行器”。

在此示例中,工作流使用了与 macOS XL 运行器关联的标签。 runs-on 键将作业发送至具有匹配标签的任何可用运行器:

name: learn-github-actions-testing
on: [push]
jobs:
  build:
    runs-on: macos-13-xlarge
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: swift build
      - name: Run tests
        run: swift test

使用组和组来控制作业的运行位置

组合组和标签时,运行器必须满足这两项要求才能运行作业。

在此示例中,名为 ubuntu-runners 的运行器组使用 Ubuntu 运行器(分配了标签 ubuntu-20.04-16core)进行填充。 runs-on 键将 grouplabels 组合在一起,以便将作业路由到具有匹配标签的组内的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      group: ubuntu-runners
      labels: ubuntu-20.04-16core
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

对运行器组使用唯一名称

GitHub Actions 要求运行器组名称在组织级别必须唯一。 这意味着组织将无法再创建与企业中的运行器组同名的运行器组。 此外,用户将在与企业中的组共享相同名称的任何运行器组上看到警告横幅,建议重命名组织组。

为了避免混淆,如果组织和企业中存在重复的运行器组,工作流将失败。 若要解决此问题,可以重命名组织或企业中的某个运行器组,也可以更新工作流文件以向运行器组名称添加前缀:

  • org/organization/
  • ent/enterprise/

示例:使用前缀区分运行器组

例如,如果组织中有一个名为 my-group 的运行器组,企业中有另一个名为 my-group 的运行器组,则可以更新工作流文件以使用 org/my-groupent/my-group 来区分这两者。

使用 org/

runs-on:
  group: org/my-group
  labels: [ self-hosted, label-1 ]

使用 ent/

runs-on:
  group: ent/my-group
  labels: [ self-hosted, label-1 ]

使用组和组来控制作业的运行位置

组合组和标签时,运行器必须满足这两项要求才能运行作业。

在此示例中,名为 ubuntu-runners 的运行器组使用 Ubuntu 运行器(分配了标签 ubuntu-20.04-16core)进行填充。 runs-on 键将 grouplabels 组合在一起,以便将作业路由到具有匹配标签的组内的任何可用运行器:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      group: ubuntu-runners
      labels: ubuntu-20.04-16core
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

对运行器组使用唯一名称

GitHub Actions 要求运行器组名称在组织级别必须唯一。 这意味着组织将无法再创建与企业中的运行器组同名的运行器组。 此外,用户将在与企业中的组共享相同名称的任何运行器组上看到警告横幅,建议重命名组织组。

为了避免混淆,如果组织和企业中存在重复的运行器组,工作流将失败。 若要解决此问题,可以重命名组织或企业中的某个运行器组,也可以更新工作流文件以向运行器组名称添加前缀:

  • org/organization/
  • ent/enterprise/

示例:使用前缀区分运行器组

例如,如果组织中有一个名为 my-group 的运行器组,企业中有另一个名为 my-group 的运行器组,则可以更新工作流文件以使用 org/my-groupent/my-group 来区分这两者。

使用 org/

runs-on:
  group: org/my-group
  labels: [ self-hosted, label-1 ]

使用 ent/

runs-on:
  group: ent/my-group
  labels: [ self-hosted, label-1 ]

大型运行器 排除故障

如果你注意到面向 大型运行器 的作业延迟或未运行,则有几个因素可能导致此问题。

  • 并发设置:可能已达到最大并发限制。 如果想要允许更多作业并行运行,可以将自动缩放设置更新为更大的数字。 有关详细信息,请参阅“管理较大的运行器”。
  • 存储库权限:确保为 大型运行器 启用适当的存储库权限。 默认情况下,企业运行器在存储库级别不可用,必须由组织管理员手动启用。 有关详细信息,请参阅“管理较大的运行器”。
  • 计费信息:必须在文件中具有有效的信用卡卡才能使用 大型运行器。 将信用卡添加到帐户后,可能需要 10 分钟才能使用 大型运行器。 有关详细信息,请参阅“添加或编辑付款方式”。
  • 支出限制:GitHub Actions 支出限制必须设置为大于零的值。 有关详细信息,请参阅“管理 GitHub Actions 的支出限制”。
  • 公平使用策略:GitHub 有一个公平使用策略,该策略根据多个因素开始限制作业,例如正在运行的作业数或在整个 GitHub Actions 中运行的作业数。
  • 作业排队到分配间隔时间:作业排队到分配间隔时间是指从发出作业请求到 GitHub 分配虚拟机来执行该作业之间的间隔时间。 使用规定 YAML 工作流标签(如 ubuntu-latest)的标准 GitHub 托管运行器始终处于“暖”状态。 对于大型运行器,由于这些计算机池较小,一台暖机可能无法做好在第一次收到请求时选取作业的准备。 因此,GitHub 可能需要创建新的虚拟机,这会增加从排队到分配的间隔时间。 运行器开始使用后,虚拟机随时可用于后续工作流运行,从而减少接下来 24 小时内的未来工作流运行的从排队到分配的间隔时间。

如果你注意到面向 大型运行器 的作业延迟或未运行,则有几个因素可能导致此问题。

  • 并发设置:可能已达到最大并发限制。 如果想要允许更多作业并行运行,可以将自动缩放设置更新为更大的数字。 有关详细信息,请参阅“管理较大的运行器”。
  • 存储库权限:确保为 大型运行器 启用适当的存储库权限。 默认情况下,企业运行器在存储库级别不可用,必须由组织管理员手动启用。 有关详细信息,请参阅“管理较大的运行器”。
  • 计费信息:必须在文件中具有有效的信用卡卡才能使用 大型运行器。 将信用卡添加到帐户后,可能需要 10 分钟才能使用 大型运行器。 有关详细信息,请参阅“添加或编辑付款方式”。
  • 支出限制:GitHub Actions 支出限制必须设置为大于零的值。 有关详细信息,请参阅“管理 GitHub Actions 的支出限制”。
  • 公平使用策略:GitHub 有一个公平使用策略,该策略根据多个因素开始限制作业,例如正在运行的作业数或在整个 GitHub Actions 中运行的作业数。
  • 作业排队到分配间隔时间:作业排队到分配间隔时间是指从发出作业请求到 GitHub 分配虚拟机来执行该作业之间的间隔时间。 使用规定 YAML 工作流标签(如 ubuntu-latest)的标准 GitHub 托管运行器始终处于“暖”状态。 对于大型运行器,由于这些计算机池较小,一台暖机可能无法做好在第一次收到请求时选取作业的准备。 因此,GitHub 可能需要创建新的虚拟机,这会增加从排队到分配的间隔时间。 运行器开始使用后,虚拟机随时可用于后续工作流运行,从而减少接下来 24 小时内的未来工作流运行的从排队到分配的间隔时间。

由于 macOS arm64 不支持 Node 12,因此 macOS 大型运行器 会自动使用 Node 16 来执行为 Node 12 写入的任何 JavaScript 操作。 某些社区操作可能与 Node 16 不兼容。 如果使用需要其他 Node 版本的操作,则可能需要在运行时手动安装特定版本。

注意: ARM 支持的运行器目前为 公共预览版,可能会更改。