跳至主要内容

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

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

您可以根据分配给运行器的标签、其组成员资格或两者的组合,将自托管运行器作为工作流的目标。

注意

Action Runner Controller 不支持多个标签,只能使用运行器的名称代替标签

关于自托管运行器标签

标签允许您根据自托管运行器的共享特征,将工作流作业发送到特定类型的自托管运行器。例如,如果您的作业需要特定的硬件组件或软件包,您可以为运行器分配自定义标签,然后配置您的作业,使其仅在具有该标签的运行器上执行。

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

自托管运行器可能具有 self-hosted 标签。在设置自托管运行器时,默认情况下,我们将包含标签 self-hosted。您可以传递 --no-default-labels 标志来阻止应用自托管标签。标签可用于创建运行器的目标选项,例如操作系统或体系结构,我们建议提供以 self-hosted 开头的标签数组(必须首先列出此标签),然后根据需要包含其他标签。当您指定标签数组时,作业将排队到具有您指定的所有标签的运行器上。

请注意,Action-runner-controller 不支持多个标签,也不支持 self-hosted 标签。

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

关于自托管运行器组

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

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

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

查看存储库的可用运行器

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

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

  2. 在您的存储库名称下,单击 操作.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  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 硬件的运行器。

要创建没有默认标签的单个自托管运行器,请在创建运行器时传递 --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 小时,则工作将失败。