Skip to main content

关于自托管运行程序

您可以托管自己的运行器,并自定义用于在 GitHub Actions 工作流程中运行作业的环境。

注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

关于自托管运行程序

自托管运行器是部署并管理以从 GitHub Actions 在 your GitHub Enterprise Server instance 上执行作业的系统。 有关 GitHub Actions 的详细信息,请参阅了解 GitHub Actions关于企业的 GitHub Actions

使用自托管运行器,可以创建自定义硬件配置,以满足处理能力或内存需求,以运行更大的作业,在本地网络上安装可用的软件,并选择 GitHub 托管的运行器未提供的操作系统。 自承载运行器可以是物理设备、虚拟设备、在容器中、在本地或在云中。

您可以在管理层次结构的各个层级添加自托管运行器:

  • 仓库级运行器专用于单个仓库。
  • 组织级运行器可以处理组织中多个仓库的作业。
  • 企业级运行器可以分配到企业帐户中的多个组织。

运行器机器使用 GitHub Actions 自托管运行器应用程序连接到 GitHub Enterprise Server。GitHub Actions 运行器应用程序是开源的。 可以参与 runner 存储库并在其中提交问题。 当发布新版本时,运行器应用程序在作业分配到运行器时或发布后一周内(如果运行器没有被分配任何作业)会自动更新。

注意:如果使用临时运行器并禁用了自动更新,则在升级 your GitHub Enterprise Server instance 之前,应首先将自托管运行器升级到升级后的实例将运行的运行器应用程序版本。 在升级临时运行器之前升级 your GitHub Enterprise Server instance 可能会导致运行器脱机。 有关详细信息,请参阅“升级 GitHub Enterprise Server”。

自托管运行器与 GitHub Actions 未连接超过 14 天,将被自动从 GitHub Enterprise Server 中删除。
临时自托管运行器与 GitHub Actions 未连接超过 1 天,将被自动从 GitHub Enterprise Server 中删除。

有关安装和使用自托管运行器的详细信息,请参阅添加自托管运行器在工作流中使用自托管运行器

GitHub 托管与自托管运行器之间的特点差异

GitHub 托管的运行器提供了一个更快、更简单的工作流程运行方式,而运行器是你的自定义环境中高度可配置的工作流程运行方式。

GitHub托管运行器:

  • 接收操作系统、预安装包和工具以及自托管运行程序应用程序的自动更新。
  • 被 GitHub 管理和维护。
  • 每次执行作业时提供一个干净的实例。
  • 使用 GitHub 计划设定的免费分钟数,超过免费分钟数后按分钟收费。

自托管运行器:

  • 仅接收自托管运行器应用程序的自动更新,但你可以禁用运行器的自动更新。 有关控制自托管运行器上的运行器软件更新的详细信息,请参阅使用自托管运行器自动缩放。 你负责更新操作系统和所有其他软件。
  • 可以使用已付费的云服务或本地计算机。
  • 可以根据硬件、操作系统、软件和安全要求进行自定义。
  • 无需在每次执行作业时提供一个干净的实例。
  • 可免费使用 GitHub Actions,但是您对运行器维护费用负责。
  • 可以组织成组以限制对特定工作流、组织和存储库的访问。 有关详细信息,请参阅使用组管理对自托管运行器的访问权限

自托管运行器机器的要求

只要符合以下要求,便可将任何计算机用作自托管运行器:

  • 您可以在机器上安装和运行自托管运行器应用程序。 有关详细信息,请参阅自托管运行器支持的架构和操作系统
  • 计算机可与 GitHub Actions 通信。 有关详细信息,请参阅自托管运行器与 GitHub Enterprise Server 之间的通信
  • 机器有足够的硬件资源来执行您计划运行的工作流程类型。 自托管运行器应用程序本身只需要很少的资源。
  • 如果您想运行使用 Docker 容器操作或服务容器的工作流程,您必须使用 Linux 机器并安装 Docker。

自动缩放自托管运行器

您可以自动增加或减少环境中自托管运行器的数量,以响应您收到的 web 挂钩事件。 有关详细信息,请参阅使用自托管运行器进行自动缩放

使用限制

在使用自托管的运行器时,对 GitHub Actions 的使用有一些限制。 这些限制可能会有变动。

  • 工作流运行时间 - 每次工作流运行时间限制为 35 天。 如果工作流程运行时间达到此限制,其运行将被取消。 此时间段包括执行持续时间以及等待和审批所用的时间。
  • 作业排队时间 - 自托管运行器的每个作业最多可排队 24 小时。 如果自托管运行器在此限制内没有开始执行作业,则作业将被终止,并且无法完成。
  • API 请求 - 一个存储库中所有操作在一小时内最多可以执行 1000 条对 GitHub API 的请求。 如果超出请求数,其他 API 调用将失败,这可能导致作业失败。
  • 作业矩阵 - 作业矩阵在每次工作流程运行时最多可生成 256 个作业。 此限制适用于 GitHub Enterprise Server 托管和自托管运行器。 - 工作流运行队列 - 每个存储库在 10 秒的间隔内可排队的工作流运行不超过 500 个。 如果工作流程运行达到此限制,该工作流程运行将会终止而无法完成。

自托管运行器的工作流连续性

如果 GitHub Actions 服务暂时不可用,则在触发后 30 分钟内没有排队时,运行的工作流程运行将被丢弃。 例如,如果触发了一个工作流程,而 GitHub Actions 服务在 31 分钟或更长时间内不可用,则该工作流程将不会被处理。

自托管运行器支持的架构和操作系统

自托管运行器应用程序支持以下操作系统。

Linux

  • Red Hat Enterprise Linux 7 或更新版本
  • CentOS 7 或更高版本
  • Oracle Linux 7
  • Fedora 29 或更高版本
  • Debian 9 或更高版本
  • Ubuntu 16.04 或更高版本
  • Linux Mint 18 或更高版本
  • openSUSE 15 或更高版本
  • SUSE Enterprise Linux (SLES) 12 SP2 或更高版本

Windows

  • Windows 7 64 位
  • Windows 8.1 64 位
  • Windows 10 64 位
  • Windows Server 2012 R2 64 位
  • Windows Server 2019 64 位

macOS

  • macOS 10.13 (High Sierra) 或更高版本

体系结构

自托管运行器应用程序支持以下处理器架构。

  • x64 - Linux、macOS、Windows。
  • ARM64 - Linux、macOS.
  • ARM32 - Linux。

对自承载运行程序的支持操作

可能需要进行额外的配置才可结合使用来自 GitHub.com 的操作与 GitHub Enterprise Server,或者结合使用 actions/setup-LANGUAGE 操作与没有互联网连接的自托管运行器。 有关详细信息,请参阅管理对 GitHub.com 上操作的访问并联系 GitHub Enterprise 站点管理员。

自托管运行器与 GitHub Enterprise Server 之间的通信

自托管运行器连接到 GitHub Enterprise Server 以接收作业分配并下载新版本的运行器应用程序。 自托管运行器使用 HTTP(S) long poll 打开 GitHub Enterprise Server 连接 50 秒,如果没有收到任何响应,就会暂停并创建新的长轮询。 应用程序必须在机器上运行才能接受和运行 GitHub Actions 作业。

自托管运行器和 GitHub Enterprise Server 通过 HTTP(端口 80)或 HTTPS(端口 443)建立连接。 若要确保通过 HTTPS 进行连接,请为 your GitHub Enterprise Server instance 配置 TLS。 有关详细信息,请参阅“配置 TLS”。

只有从运行器到 your GitHub Enterprise Server instance 的出站连接是必需的。 不需要从 your GitHub Enterprise Server instance 到运行器的入站连接。 若要使缓存正常工作,运行器必须能够与 Blob 存储通信,并直接从其中下载内容。

GitHub Enterprise Server 必须接受来自运行器通过 HTTP(S)、使用 your GitHub Enterprise Server instance 的主机名和 API 子域的入站连接,并且运行器必须允许通过 HTTP(S) 到 your GitHub Enterprise Server instance 的主机名和 API 子域的出站连接。

自托管运行器不需要接入任何外部互联网即可运行。 因此,你可以使用网络路由在自托管运行器与 your GitHub Enterprise Server instance 之间直接通信。 例如,你可以将私有 IP 地址分配给自托管运行器,并配置路由以将流量发送到 your GitHub Enterprise Server instance,无需流量便可浏览公用网络。

您也可以通过代理服务器使用自托管的运行器。 有关详细信息,请参阅将代理服务器与自托管运行器配合使用

有关排查常见网络连接问题的详细信息,请参阅对自托管运行器进行监视和故障排除

自托管运行器与 GitHub.com 之间的通信

自托管运行器不需要连接到 GitHub.com,除非你已启用自动访问 your GitHub Enterprise Server instance 的 GitHub.com 操作。 有关详细信息,请参阅关于在企业中使用操作

如果已启用自动访问 GitHub.com 操作,则自托管运行器将直接连接到 GitHub.com 以下载操作。 您必须确保机器具有适当的网络访问权限才可与以下列出的 GitHub URL 通信。

github.com
api.github.com
codeload.github.com

注意:上面列出的一些域名使用 CNAME 记录。 一些防火墙可能要求你为所有 CNAME 记录递归添加规则。 请注意,CNAME 记录将来可能会改变,只有上面列出的域名将保持不变。

自托管运行器安全性

在自托管运行器上运行不受信任的工作流程会给您的机器和网络环境带来严重的安全风险,特别是机器在同一环境下执行不同的作业时。 其中一些风险包括:

  • 机器上运行的恶意程序。
  • 逃避机器的运行器沙盒。
  • 显示对机器网络环境的访问权限。
  • 在机器上保持不需要或危险的数据。

有关自托管运行器的安全强化的详细信息,请参阅 GitHub Actions 的安全强化

延伸阅读