Skip to main content
我们经常发布文档更新,此页面的翻译可能仍在进行中。 有关最新信息,请访问英语文档

此版本的 GitHub Enterprise 已停止服务 2023-03-15. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

使用自托管运行器自动缩放

您可以自动扩展自托管运行器以响应 web 挂钩事件。

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

关于自动缩放

您可以自动增加或减少环境中自托管运行器的数量,以响应您收到的带特定标签的 web 挂钩事件。 例如,可创建自动化,在每次收到带有 queued 活动的 workflow_job webhook 事件时添加一个新的自托管运行器,通知你有一个新的作业已准备好进行处理。 Web 挂钩有效负载包含标签数据,因此您可以识别作业请求的运行器类型。 作业完成后,可创建自动化,以响应 workflow_job completed 活动删除运行器。

GitHub 推荐两个开源项目并与之密切合作,您可以使用它们来自动缩放运行器。 根据您的需求,一个或两个解决方案可能适用。

以下存储库提供了有关设置这些自动缩放程序的详细说明:

每个解决方案都有一些需要考虑的重要细节。

功能actions-runner-controllerterraform-aws-github-runner
运行时KubernetesLinux 和 Windows VM
支持的云Azure、Amazon Web Services、Google Cloud Platform、本地Amazon Web Services
运行器可以缩放的位置企业、组织和存储库级别。 通过运行器标签和运行器组。组织和存储库级别。 通过运行器标签和运行器组。
如何缩放运行器Web 挂钩事件、计划、基于拉取Web 挂钩事件、计划(仅限组织级运行器)

使用临时运行器进行自动缩放

GitHub 建议使用临时的自托管运行器实现自动缩放;不建议使用持久的自托管运行器进行自动缩放。 在某些情况下, GitHub 无法保证作业在关闭时不会分配给持久性运行器。 对于临时运行器,这可以得到保证,因为 GitHub 只将一个作业分配给运行器。

这种方法允许您将运行器作为临时系统进行管理,因为您可以使用自动化为每个作业提供干净的环境。 这有助于限制以前工作中任何敏感资源的暴露,也有助于降低受损运行器获得新作业的风险。

要将临时运行器添加到环境,请在使用 config.sh 注册运行器时包含 --ephemeral 参数。 例如:

./config.sh --url https://github.com/octo-org --token example-token --ephemeral

然后,GitHub Actions 服务将在处理完一个作业后自动取消注册运行器。 然后,您可以创建自己的自动化,在取消注册后擦除运行器。

注意:如果作业被标记为特定类型的运行器,但没有匹配该类型的作业可用,则作业在排队时不会立即失败。 相反,作业将保持排队状态,直到 24 小时超时期限到期。

使用 web 挂钩进行自动缩放

可使用从 workflow_job Webhook 接收的有效负载自行创建自动缩放环境。 此 Webhook 在存储库、组织和企业级别可用,并且此事件的有效负载包含一个 action 键,该键对应于工作流作业生命周期的各个阶段;例如,当作业是 queuedin_progresscompleted 时。 然后,您必须创建自己的缩放自动化以响应这些 web 挂钩有效负载。

身份验证要求

可使用 API 注册和删除存储库和组织自托管运行器。 若要向 API 进行身份验证,自动缩放实现可以使用访问令牌或 GitHub 应用。

访问令牌将需要以下作用域:

要使用 GitHub 应用进行身份验证,必须为其分配以下权限:

  • 对于存储库,请分配 administration 权限。
  • 对于组织,请分配 organization_self_hosted_runners 权限。

可使用 API 注册和删除企业自托管运行器。 要向 API 进行身份验证,自动缩放实现可以使用访问令牌。

访问令牌将需要 manage_runners:enterprise 范围。