Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

此版本的 GitHub Enterprise 已停止服务 2023-01-18. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 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 范围。