关于自动缩放
您可以根据接收到的带有特定标签的 Webhook 事件,自动增加或减少环境中的自托管运行器数量。例如,您可以创建自动化,以便在每次收到带有 workflow_job
Webhook 事件的 queued
活动时添加一个新的自托管运行器,该活动通知您一个新作业已准备好进行处理。Webhook 有效负载包含标签数据,因此您可以识别作业请求的运行器类型。作业完成后,您可以创建自动化,以响应 workflow_job
completed
活动来删除运行器。
支持的自动缩放解决方案
GitHub 托管运行器根据您的需求进行自动缩放。GitHub 托管运行器可以作为开发或实施自动缩放解决方案的低维护和经济高效的替代方案。有关更多信息,请参阅“关于 GitHub 托管运行器”。
actions/actions-runner-controller (ARC) 项目是一个基于 Kubernetes 的运行器自动缩放器。如果部署它的团队拥有专业的 Kubernetes 知识和经验,GitHub 建议使用 ARC。
有关更多信息,请参阅“关于 Actions Runner Controller”和“关于 Actions Runner Controller 的支持”。
使用临时运行器进行自动缩放
GitHub 建议使用临时自托管运行器实现自动缩放;不建议使用持久自托管运行器进行自动缩放。在某些情况下,GitHub 无法保证作业不会在持久运行器关闭时分配给它们。使用临时运行器,可以保证这一点,因为 GitHub 只将一个作业分配给一个运行器。
这种方法允许您将运行器管理为临时系统,因为您可以使用自动化为每个作业提供一个干净的环境。这有助于限制来自先前作业的任何敏感资源的暴露,也有助于降低受损运行器接收新作业的风险。
警告
为了故障排除和诊断目的,必须将短暂运行器的运行器应用程序日志文件转发到外部日志存储解决方案。虽然短暂运行器不需要部署,但 GitHub 建议在生产环境中部署短暂运行器自动扩展解决方案之前,确保运行器日志被转发并保存在外部。有关更多信息,请参阅“监控和故障排除自托管运行器”。
要将短暂运行器添加到您的环境中,请在使用 config.sh
注册运行器时包含 --ephemeral
参数。例如
./config.sh --url https://github.com/octo-org --token example-token --ephemeral
然后,GitHub Actions 服务将在运行器处理完一项作业后自动取消注册该运行器。然后,您可以创建自己的自动化程序,在运行器被取消注册后将其擦除。
注意:如果一项作业被标记为特定类型的运行器,但没有匹配该类型的运行器可用,则该作业不会在排队时立即失败。相反,该作业将保持排队状态,直到 24 小时超时时间到期。
或者,您可以使用 REST API 创建短暂的、即时运行器。有关更多信息,请参阅“自托管运行器的 REST API 端点”。
控制自托管运行器上的运行器软件更新
默认情况下,自托管运行器将在有新版本的运行器软件可用时自动执行软件更新。如果您在容器中使用短暂运行器,那么当发布新版本的运行器时,这会导致重复的软件更新。关闭自动更新允许您根据自己的时间表直接在容器镜像上更新运行器版本。
要关闭自动软件更新并自行安装软件更新,请在使用 config.sh
注册运行器时指定 --disableupdate
标志。例如
./config.sh --url https://github.com/YOUR-ORGANIZATION --token EXAMPLE-TOKEN --disableupdate
如果您禁用自动更新,您仍然必须定期更新您的运行器版本。GitHub Actions 中的新功能需要在 GitHub Actions 服务和运行器软件中进行更改。如果没有软件更新,运行器可能无法正确处理利用 GitHub Actions 中新功能的作业。
如果您禁用自动更新,您需要在发布新版本后的 30 天内更新您的运行器版本。您可能需要订阅 actions/runner
存储库 中的版本发布通知。有关更多信息,请参阅“配置通知”。
有关如何安装最新运行器版本的说明,请参阅最新版本的安装说明。
警告
软件发布的任何更新,包括主要版本、次要版本或补丁版本,都视为可用更新。如果您在 30 天内未执行软件更新,GitHub Actions 服务将不会将作业排队到您的运行器。此外,如果需要进行关键安全更新,GitHub Actions 服务将不会将作业排队到您的运行器,直到它已更新。
使用 Webhook 进行自动扩展
您可以通过使用从workflow_job
Webhook 收到的有效负载来创建自己的自动扩展环境。此 Webhook 在仓库、组织和企业级别可用,此事件的有效负载包含一个与工作流作业生命周期的阶段相对应的action
键;例如,当作业queued
、in_progress
和completed
时。然后,您必须根据这些 Webhook 有效负载创建自己的扩展自动化。
- 有关
workflow_job
Webhook 的更多信息,请参阅“Webhook 事件和有效负载”。 - 要了解如何使用 Webhook,请参阅“Webhook 文档”。
身份验证要求
您可以使用API注册和删除仓库和组织自托管运行器。要对 API 进行身份验证,您的自动扩展实现可以使用访问令牌或 GitHub 应用。
您的访问令牌将需要以下范围
- 对于私有仓库,请使用具有
repo
范围的访问令牌。 - 对于公共仓库,请使用具有
public_repo
范围的访问令牌。 - 对于组织,请使用具有
admin:org
范围的访问令牌。
要使用 GitHub 应用进行身份验证,它必须分配以下权限
- 对于仓库,分配
administration
权限。 - 对于组织,分配
organization_self_hosted_runners
权限。
您可以使用API注册和删除企业自托管运行器。要对 API 进行身份验证,您的自动扩展实现可以使用访问令牌。
您的访问令牌将需要manage_runners:enterprise
范围。