跳至主要内容

为作业选择运行器

定义将在工作流中处理作业的机器类型。

概述

使用 jobs.<job_id>.runs-on 定义要运行作业的机器类型。

  • 您可以将 runs-on 提供为

    • 单个字符串
    • 包含字符串的单个变量
    • 字符串数组、包含字符串的变量或两者的组合
    • 使用 grouplabels 键的 键:值
  • 如果您指定字符串或变量数组,您的工作流将在与所有指定的 runs-on 值匹配的任何运行器上执行。例如,此处作业仅在具有标签 linuxx64gpu 的自托管运行器上运行

    runs-on: [self-hosted, linux, x64, gpu]
    

    更多信息,请参见“选择自托管运行器”。

  • 您可以在数组中混合字符串和变量。例如

    on:
      workflow_dispatch:
        inputs:
          chosen-os:
            required: true
            type: choice
            options:
            - Ubuntu
            - macOS
    
    jobs:
      test:
        runs-on: [self-hosted, "${{ inputs.chosen-os }}"]
        steps:
        - run: echo Hello world!
    
  • 如果您希望在多台机器上运行工作流,请使用 jobs.<job_id>.strategy

注意

简单字符串(如 self-hosted)不需要用引号括起来,但表达式(如 "${{ inputs.chosen-os }}")需要用引号括起来。

选择 GitHub 托管运行器

如果您使用 GitHub 托管运行器,则每个作业都会在 runs-on 指定的运行器映像的新实例中运行。

当您使用 GitHub 托管运行器时,`runs-on` 的值是运行器标签或运行器组的名称。标准 GitHub 托管运行器的标签如下表所示。

更多信息,请参阅“关于 GitHub 托管运行器”。

公共仓库的标准 GitHub 托管运行器

对于公共仓库,使用下表中所示工作流标签的作业将在具有关联规格的虚拟机上运行。在公共仓库上使用这些运行器是免费且不受限制的。

虚拟机 处理器 (CPU) 内存 (RAM) 存储 (SSD) 工作流标签
Linux 4 16 GB 14 GB ubuntu-latestubuntu-24.04ubuntu-22.04ubuntu-20.04
Windows 4 16 GB 14 GB windows-latestwindows-2022windows-2019
macOS 3 14 GB 14 GB macos-12
macOS 4 14 GB 14 GB macos-13
macOS 3 (M1) 7 GB 14 GB macos-latestmacos-14macos-15 [公开预览]

私有仓库的标准 GitHub 托管运行器

对于私有仓库,使用下表中所示工作流标签的作业将在具有关联规格的虚拟机上运行。这些运行器使用您的 GitHub 帐户分配的免费分钟数,然后按每分钟费率收费。更多信息,请参阅“关于 GitHub Actions 的计费”。

虚拟机 处理器 (CPU) 内存 (RAM) 存储 (SSD) 工作流标签
Linux 2 7 GB 14 GB ubuntu-latestubuntu-24.04ubuntu-22.04ubuntu-20.04
Windows 2 7 GB 14 GB windows-latestwindows-2022windows-2019
macOS 3 14 GB 14 GB macos-12
macOS 4 14 GB 14 GB macos-13
macOS 3 (M1) 7 GB 14 GB macos-latestmacos-14macos-15 [公开预览]

除了标准的 GitHub 托管运行器外,GitHub 还为 GitHub Team 和 GitHub Enterprise Cloud 方案的客户提供一系列具有高级功能的托管虚拟机——例如,更多核心和磁盘空间、GPU 加速的机器和 ARM 架构的机器。更多信息,请参阅“关于更大规模的运行器”。

注意

-latest 运行器镜像是 GitHub 提供的最新稳定镜像,可能不是操作系统厂商提供的最新操作系统版本。

警告

测试版和已弃用的镜像按“现状”、“包含所有缺陷”和“按可用性”提供,不包含在服务等级协议和保修中。测试版镜像可能不受客户支持的范围。

示例:指定操作系统

runs-on: ubuntu-latest

更多信息,请参阅“使用 GitHub 托管运行器”。

选择自托管运行器

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

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

请注意,Actions Runner Controller 不支持多个标签,也不支持 `self-hosted` 标签。

示例:使用标签进行运行器选择

runs-on: [self-hosted, linux]

更多信息,请参阅“关于自托管运行器”和“在工作流中使用自托管运行器”。

选择组中的运行器

您可以使用 `runs-on` 来定位运行器组,以便作业将在该组的任何运行器上执行。为了更精细的控制,您还可以将运行器组与标签组合。

运行器组只能具有更大规模的运行器自托管运行器作为成员。

示例:使用组控制作业运行位置

在此示例中,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