托管运行器

我们在上一章中已经使用了托管运行器。托管运行器是 GitHub 托管的虚拟机,可以用来运行您的工作流。运行器适用于 Linux、Windows 和 macOS 操作系统。

隔离和权限

工作流中的每个作业都在虚拟机的新实例中执行,完全隔离。您拥有完全的管理员权限(在 Linux 上是无密码的 sudo 权限),并且 Windows 机器上的用户账户控制(UAC)已禁用。这意味着您可以在工作流中安装所需的任何工具(这会增加构建时间)。

运行器还可以访问用户界面(UI)元素。这使得您能够在运行器内执行 UI 测试(例如 Selenium),而无需通过另一个虚拟机进行测试。

硬件

GitHub 在 Microsoft Azure 上托管 Linux 和 Windows 运行器,使用的是 Standard_DS2_v2 虚拟机。Windows 和 Linux 虚拟机的硬件规格如下:

  • 2 核心 CPU

  • 7 GB RAM

  • 14 GB SSD 磁盘空间

macOS 运行器托管在 GitHub 的 macOS 云中,具有以下硬件规格:

  • 3 核心 CPU

  • 14 GB RAM

  • 14 GB SSD 磁盘空间

软件

在表 7.1 中,您可以查看当前可用的镜像列表:

image 2024 12 27 12 40 36 315
Figure 1. 表 7.1 – 托管运行器的当前可用镜像

您可以在 GitHub Actions 虚拟环境 中找到当前的镜像列表和所有包含的软件。

如果您希望请求将某个新工具安装为默认工具,您也可以在该仓库中提交问题。该仓库还包含有关运行器所有重大软件更新的公告,您可以使用 GitHub 仓库的 "watch" 功能来接收新版本发布的通知。

网络

托管运行器使用的 IP 地址会不定期变化。您可以通过 GitHub API 获取当前的 IP 列表:

curl \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/meta

有关更多信息,您可以访问 GitHub REST API 文档

您可以使用这些信息,如果您需要一个允许列表(allow-list),以防止外部访问您的内部资源。但是请记住,任何人都可以使用托管运行器并执行代码!阻止其他 IP 地址并不会使您的资源变得安全。不要将内部系统暴露给这些未经过安全保护的 IP 地址,尤其是当它们来自公共互联网时!这意味着这些系统必须经过补丁更新,并且具备安全的身份验证机制。如果这些条件不满足,您需要使用自托管运行器。

如果您为 GitHub 组织或企业帐户使用 IP 地址允许列表,您将无法使用 GitHub 托管的运行器,而必须使用自托管的运行器。

定价

托管运行器在公共仓库中使用是免费的。根据您的 GitHub 版本,您将获得一定的存储量和每月免费的构建时间(见表 7.2)。

image 2024 12 27 12 41 59 745
Figure 2. 表 7.2 – 不同 GitHub 版本的存储和构建时间

如果您通过 Microsoft 企业协议购买了 GitHub Enterprise,您可以将 Azure 订阅 ID 连接到您的 GitHub Enterprise 帐户。这使您能够支付额外的 GitHub Actions 使用费用,除了您 GitHub 版本中包含的部分。

在 Windows 和 macOS 运行器上运行的作业会消耗更多的构建时间!Windows 的消耗是 Linux 的 2 倍,macOS 的消耗是 Linux 的 10 倍。也就是说,使用 1,000 分钟的 Windows 会消耗您帐户中 2,000 分钟的配额,而使用 1,000 分钟的 macOS 会消耗 10,000 分钟。

这是因为这些构建分钟的费用更高。您可以支付额外的分钟费用,超出您 GitHub 版本中包含的部分。不同操作系统的构建分钟费用如下:

  • Linux:$0.008

  • macOS:$0.08

  • Windows:$0.016

您应该尽量使用 Linux 进行工作流,并将 macOS 和 Windows 的使用减少到最小,以降低构建成本。Linux 还具有最佳的启动性能。

所有运行器的额外存储费用相同,为每 GB $0.25。

如果您是按月计费的客户,您的帐户将默认设置为 $0(美元)的支出限制。这将防止额外的构建时间或存储使用。如果您是按发票支付的客户,您的帐户默认没有支出限制。

如果您将支出限制配置为高于 $0,您将为超过帐户中包含的分钟或存储支付费用,直到达到支出限制。