您可以根据分配给运行器的标签、其组成员身份或两者的组合来指定自托管运行器以供工作流使用。
注意
Actions Runner Controller 不支持多个标签,只能使用运行器的名称代替标签。
关于自托管运行器标签
标签允许您根据自托管运行器的共享特征,将工作流作业发送到特定类型的自托管运行器。例如,如果您的作业需要特定的硬件组件或软件包,您可以为运行器分配自定义标签,然后配置您的作业,使其仅在具有该标签的运行器上执行。
要为您的作业指定自托管运行器,请在工作流文件中使用自托管运行器标签配置 runs-on
。
自托管运行器可能具有 self-hosted
标签。在设置自托管运行器时,默认情况下,我们将包含标签 self-hosted
。您可以传递 --no-default-labels
标志以防止应用自托管标签。标签可用于创建运行器的目标选项,例如操作系统或体系结构,我们建议提供一个以 self-hosted
开头的标签数组(此标签必须位于第一个位置),然后根据需要包含其他标签。当您指定标签数组时,作业将排队到具有您指定的所有标签的运行器上。
请注意,Actions Runner Controller 不支持多个标签,也不支持 self-hosted
标签。
有关创建自定义标签和默认标签的信息,请参阅“将标签与自托管运行器一起使用”。
关于自托管运行器组
对于在组织级别定义的自托管运行器,您可以将具有共享特征的运行器组合到单个运行器组中,然后配置您的作业以定位运行器组。
要为您的作业指定自托管运行器组,请在工作流文件中配置 runs-on.group
。
有关创建和管理运行器组的信息,请参阅“使用组管理对自托管运行器的访问”。
查看存储库可用的运行器
如果您对存储库具有 repo: write
访问权限,则可以查看存储库可用的运行器列表。
-
在 GitHub 上,导航到存储库的主页。
-
在您的存储库名称下,单击 操作.
-
在左侧边栏的“管理”部分下,单击 运行器.
-
单击运行器列表顶部的“自托管”选项卡。
-
查看存储库可用的自托管运行器列表。此列表包括使用 Actions Runner Controller 创建的自托管运行器和运行器规模集。有关更多信息,请参阅“关于 Actions Runner Controller”。
-
可选,要复制运行器的标签以在工作流中使用,请单击运行器的右侧,然后单击“复制标签”。
使用默认标签路由作业
自托管运行器在添加到 GitHub Actions 时会自动接收某些标签。这些标签用于指示其操作系统和硬件平台。
self-hosted
:应用于自托管运行器的默认标签。linux
、windows
或macOS
:根据操作系统应用。x64
、ARM
或ARM64
:根据硬件架构应用。
您可以使用工作流的 YAML 将作业发送到这些标签的组合。在此示例中,匹配所有三个标签的自托管运行器将有资格运行作业。
runs-on: [self-hosted, linux, ARM64]
self-hosted
- 在自托管运行器上运行此作业。linux
- 仅使用基于 Linux 的运行器。ARM64
- 仅使用基于 ARM64 硬件的运行器。
要创建没有默认标签的单个自托管运行器,请在创建运行器时传递 --no-default-labels
标志。Actions Runner Controller 不支持多个标签。
使用自定义标签路由作业
您可以随时创建自定义标签并将其分配给您的自托管运行器。自定义标签允许您根据自托管运行器的标签方式,将作业发送到特定类型的自托管运行器。
例如,如果您有一个需要特定类型图形硬件的作业,您可以创建一个名为 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@v4
with:
node-version: '14'
- run: npm install -g bats
- run: bats -v
使用标签和组路由作业
当您组合组和标签时,运行器必须满足这两个要求才能有资格运行该作业。
在此示例中,名为 ubuntu-runners
的运行器组填充了 Ubuntu 运行器,这些运行器也已分配了标签 ubuntu-20.04-16core
。runs-on
键组合了 group
和 labels
,以便作业被路由到组中任何可用的运行器,并且该运行器还具有匹配的标签。
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 会查找与作业的 runs-on
标签和/或组匹配的运行器。
- 如果 GitHub 找到与作业的
runs-on
标签和/或组匹配的在线且空闲的运行器,则作业将被分配并发送到该运行器。- 如果运行器在 60 秒内未获取分配的作业,则作业将重新排队,以便新的运行器可以接受它。
- 如果 GitHub 未找到与作业的
runs-on
标签和/或组匹配的在线且空闲的运行器,则作业将保持排队状态,直到运行器上线。 - 如果作业保持排队状态超过 24 小时,则作业将失败。