Skip to main content

在工作流中使用自托管运行程序

若要在工作流中使用自托管运行器,可使用标签或组来指定作业的运行器。

可基于分配给运行器的标签或其组成员身份或两者的组合,面向要在工作流中使用的自托管运行器。

关于自托管运行器标签

标签允许您根据其共同特征向特定类型的自托管运行器发送工作流程作业。 例如,如果您的作业需要特定的硬件组件或软件包。 您可以将一个自定义标签分配给运行器,然后将您的作业配置为仅在带该标签的运行器中执行。

要为作业指定自托管运行器,请在工作流文件中使用自托管运行器标签配置 runs-on

所有自托管运行器都有 self-hosted 标签。 仅使用此标签将选择任何自托管运行器。 选择符合特定条件的运行器,例如操作系统或体系结构,建议提供以 self-hosted 开头的标签数组(必须首先列出),然后根据需要包含其他标签。 指定标签数组时,作业将在具有你指定的所有标签的运行器上排队。

尽管 self-hosted 标签不是必需的,但强烈建议在使用自托管运行器时指定它,以确保作业不会无意中指定任何当前或将来的 GitHub 托管运行器。

有关创建自定义标签和默认标签的信息,请参阅“将标签与自托管运行程序结合使用”。

关于自托管运行器组

对于在组织级别定义的自托管运行器,可将具有共用特征的运行器分组到单个运行器组中,然后将作业配置为面向该运行器组。

若要为作业指定自托管运行器组,请在工作流文件中配置 runs-on.group

有关创建和管理运行器组的信息,请参阅“使用组管理对自托管运行程序的访问”。

查看存储库可用的运行器

注意:此功能目前为 beta 版本,可能会有变动。

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

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

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

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

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

  4. 单击运行器列表顶部的“自托管”选项卡。****

  5. 查看存储库可用的自托管运行器列表。 此列表包括自托管运行器和使用 Actions Runner Controller 创建的运行器规模集。 有关详细信息,请参阅“关于 Actions Runner Controller”。

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

注意: 有权创建运行器的企业和组织所有者可以选择从此页创建新的运行器。 如果是企业或组织所有者,请单击运行器列表右上角的“新建运行器”,将运行器添加到存储库。**** 有关详细信息,请参阅 “管理较大的运行器”和 “添加自托管的运行器”。

使用默认标签路由作业

在被添加到 GitHub Actions 后,自托管运行器将自动收到某些标签。 这些被用于指出其操作系统和硬件平台:

  • self-hosted:应用于所有自托管运行器的默认标签
  • linuxwindowsmacOS:根据操作系统应用。
  • x64ARMARM64:根据硬件体系结构应用。

您可以使用您工作流程的 YAML 将作业发送到这些标签的组合。 在此示例中,与所有三个标签匹配的自托管运行器将有资格运行该作业:

runs-on: [self-hosted, linux, ARM64]
  • self-hosted - 在自托管运行器上运行此作业。
  • linux - 仅使用基于 Linux 的运行器。
  • ARM64 - 仅使用基于 ARM64 硬件的运行器。

默认标签是固定的,无法更改或删除。 如果您需要对作业路由的更多控制,考虑使用自定义标签。

使用自定义标签路由作业

您可以随时创建自定义标签并将其分配给您的自托管运行器。 自定义标签允许您根据其标注将作业发送给特定的自托管运行器类型。

例如,如果某个作业需要特定类型的图形硬件,则可以创建名为 gpu 的自定义标签,并将其分配给安装了该硬件的运行器。 然后,与所有已分配的标签匹配的自托管运行器将有资格运行该作业。

此示例显示组合默认标签和自定义标签的作业:

runs-on: [self-hosted, linux, x64, gpu]
  • self-hosted - 在自托管运行器上运行此作业。
  • linux - 仅使用基于 Linux 的运行器。
  • x64 - 仅使用基于 x64 硬件的运行器。
  • gpu - 此自定义标签已被手动分配给安装了 GPU 硬件的自托管运行器。

这些标签累计运行,所以自托管运行器必须拥有所有四个标签才能处理该作业。

使用组来路由作业

在此示例中,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@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

使用标签和组来路由作业

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

在此示例中,名为 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@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

自托管运行器的路由优先级

将作业路由到自托管运行器时,GitHub 将查找与作业的 runs-on 标签和/或组匹配的运行器:

  • 如果 GitHub 找到一个在线的空闲运行器与作业的 runs-on 标签和/或组匹配,则将分配该作业并将其发送到该运行器。
    • 如果运行器在 60 秒内未收到分配的任务,任务将被重新排队,以便新的运行器能够接纳它。
  • 如果 GitHub 未找到在线的空闲运行器与作业的 runs-on 标签和/或组匹配,则作业将保持在排队状态,直到运行器在线为止。
  • 如果作业排队的时间超过 24 小时,则作业将失败。