我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

GitHub 托管的运行器的虚拟环境

GitHub 提供托管的虚拟机来运行工作流程。 虚拟机包含可供 GitHub 操作 使用的工具、包和设置。

GitHub 操作 可用于 GitHub Free、GitHub Pro、组织的 GitHub Free、GitHub Team、GitHub Enterprise Cloud 和 GitHub One。 GitHub 操作 不适用于使用旧版按仓库计划的帐户所拥有的私有仓库。 更多信息请参阅“GitHub 的产品”。

本文内容

关于 GitHub 托管的运行器

GitHub 托管的运行器是由安装了 GitHub 操作 运行器应用程序的 GitHub 托管的虚拟机。 GitHub 提供使用 Linux、Windows 和 macOS 操作系统的运行器。

使用 GitHub 托管的运行器时,设备维护和升级由您负责。 您可以直接在虚拟机上或 Docker 容器中运行工作流程。

可以为工作流程中的每项作业指定运行器类型。 工作流程中的每项作业都在全新的虚拟机实例中执行。 作业中的所有步骤在同一虚拟机实例中执行,让该作业中的操作使用文件系统共享信息。

GitHub 操作 运行器应用程序是开源的。 您可以参与 runner 仓库并在其中提交议题。

GitHub 托管的运行器的云主机

GitHub 在 Microsoft Azure 中安装了 GitHub 操作 运行器应用程序的 Standard_DS2_v2 虚拟机上托管 Linux 和 Windows 运行器。 GitHub 托管的运行器应用程序是 Azure Pipelines Agent 的复刻。 入站 ICMP 数据包被阻止用于所有 Azure 虚拟机,因此 ping 或 traceroute 命令可能无效。 有关 Standard_DS2_v2 机器资源的更多信息,请参阅 Microsoft Azure 文档中的“Dv2 和 DSv2 系列”。

GitHub 使用 MacStadium 托管 macOS 运行器。

GitHub 托管的运行器的管理权限

Linux 和 macOS 虚拟机都使用无密码的 sudo 运行。 在需要比当前用户更多的权限才能执行命令或安装工具时,您可以使用无需提供密码的 sudo。 更多信息请参阅“Sudo 手册”。

Windows 虚拟机配置为以禁用了用户帐户控制 (UAC) 的管理员身份运行。 更多信息请参阅 Windows 文档中的“用户帐户控制工作原理”。

支持的运行器和硬件资源

每台虚拟机都有相同的硬件资源。

  • 2 核 CPU
  • 7 GB RAM 内存
  • 14 GB SSD 硬盘空间
虚拟环境YAML 工作流程标签
Windows Server 2019windows-latestwindows-2019
Ubuntu 18.04ubuntu-latestubuntu-18.04
Ubuntu 16.04ubuntu-16.04
macOS Catalina 10.15macos-latestmacos-10.15

有关各运行器支持的软件、工具和包的列表,请参阅“GitHub 托管的运行器上安装的软件”。

您可以查看工作流程运行的日志,以查看用于作业的确切运行器环境, 以及连接到运行器上预安装工具的链接。 更多信息请参阅“管理工作流程运行”。

GitHub 托管的运行器的 IP 地址

注意:如果使用 GitHub 组织或企业帐户的 IP 地址允许列表,则无法使用 GitHub 托管的运行器,而必须使用自托管的运行器。 更多信息请参阅“关于自托管运行器”。

Windows 和 Ubuntu 运行程序托管在 Azure 中,具有与 Azure 数据中心相同的 IP 地址范围。 目前,所有 Windows 和 Ubuntu GitHub 托管的运行器都在以下 Azure 地区:

  • 美国东部 (eastus)
  • 美国东部 2 (eastus2)
  • 美国西部 2 (westus2)
  • 美国中部 (centralus)
  • 美国中南部 (southcentralus)

Microsoft 每周通过 JSON 文件更新 Azure IP 地址范围,您可以从 Azure IP 范围和服务标签 - 公共云网站下载该文件。 如果需要一个允许列表来阻止未经授权访问您的内部资源,您可以使用此 IP 地址范围。

JSON 文件包含一个名为 values 的数组。 例如,在该数组内,您可以通过包含 "AzureCloud.eastus2"nameid 的对象找到支持的 IP 地址。

您可以在 "addressPrefixes" 对象中找到支持的 IP 地址范围。 这是 JSON 文件的精简示例。

{
  "changeNumber": 84,
  "cloud": "Public",
  "values": [
    {
      "name": "AzureCloud.eastus2",
      "id": "AzureCloud.eastus2",
      "properties": {
        "changeNumber": 33,
        "region": "eastus2",
        "platform": "Azure",
        "systemService": "",
        "addressPrefixes": [
          "13.68.0.0/17",
          "13.77.64.0/18",
          "13.104.147.0/25",
          ...
        ]
      }
    }
  ]
}

GitHub 托管的运行器上的文件系统

GitHub 在虚拟机上的特定目录中执行操作和 shell 命令。 虚拟机上的文件路径不是静态的。 使用环境变量 GitHub 提供 homeworkspaceworkflow 目录的构建文件路径。

目录环境变量描述
homeHOME包含用户相关的数据。 例如,此目录可能包含登录凭据。
workspaceGITHUB_WORKSPACE在此目录中执行操作和 shell 命令。 操作可以修改此目录的内容,后续操作可以访问这些修改。
workflow/event.jsonGITHUB_EVENT_PATH触发工作流程的 web 挂钩事件的 POST 有效负载。 每当操作执行时,GitHub 都会重写此变量,以隔离操作之间的文件内容。

有关 GitHub 为每个操作创建的环境变量列表,请参阅“使用环境变量”。

Docker 容器文件系统

在 Docker 容器中运行的操作在 /github 路径下有静态目录。 但强烈建议使用默认环境变量在 Docker 容器中构建文件路径。

GitHub 保留 /github 路径前缀,并为操作创建三个目录。

  • /github/home
  • /github/workspace - 注:GitHub 操作 必须由默认 Docker 用户 (root) 运行。 确保您的 Dockerfile 未设置 USER 指令,否则您将无法访问 GITHUB_WORKSPACE
  • /github/workflow

延伸阅读

问问别人

找不到要找的内容?

联系我们