GitHub 官方文档列出的标准托管 macOS Runner 并发上限中,Team 计划为 5 个并发 macOS 作业;该限制可能随计划和规则调整,选型前应核对官方并发限制表。
症状: 构建时有时无、峰值排队,或者团队不想持续维护 macOS 机器。
最快解法: 负载不稳定且希望少管机器,先评估 GitHub 托管 macOS Runner;构建频繁、持续运行,或需要控制环境、访问内部网络,则评估自托管 Mac Runner。两类需求并存时,优先试点混合部署,并用实际构建记录和完整运维成本验证。
正在为 iOS 项目选择 GitHub Actions 构建环境的 IT 与技术负责人,可以据此划定托管和自托管的适用边界。
需要估算长期支出的采购负责人,可用成本变量清单建立测算表。
管理多个仓库或工作流的平台工程师,可用决策矩阵判断是否需要混合 Runner。
先看成本:Runner 分钟费不是完整账单
自托管 Mac Runner 不产生 GitHub Actions Runner 分钟费后,还要算什么? 机器成本不会因此消失:采购或租赁、系统与工具链维护、故障排查、闲置容量,以及负责这些工作的团队工时,都应纳入 iOS CI/CD 构建成本。
GitHub 官方说明,私有仓库使用标准托管 Runner 时,计划内分钟额度用完后会按规则计费;自托管 Runner 不产生 Actions 分钟费。托管 Runner 的计费还涉及构建产物与缓存等存储使用,不能只看作业运行分钟数。具体额度和费率会变,应在核算时查看GitHub Actions 计费说明。成本核算时,还要区分托管 Runner 的适用计划、分钟用量和存储支出,以及自托管方案的主机账单和维护投入。
| 计算项 | GitHub 托管 macOS Runner | 自托管 Mac Runner | 应从哪里取数 |
|---|---|---|---|
| Runner 使用费 | 按适用计划、Runner 类型和用量核算;大规格 Runner 规则可能不同 | Actions 分钟费为零;主机仍有采购或租赁成本 | GitHub 账单、计费文档、主机账单 |
| 构建产物与缓存 | 核对存储用量和适用额度 | 核对自有存储、备份和保留策略 | 账单、存储监控、保留配置 |
| 维护工时 | 重点记录工作流和依赖调整 | 记录系统更新、工具链维护、故障处理 | 工单、值班记录、工时 |
| 闲置与峰值容量 | 记录实际用量及未满足的并发需求 | 记录空闲时长、容量预留和扩容方式 | 工作流历史、主机利用率 |
| 总成本 | Runner 费用加存储及相关支出 | 主机费用加维护、闲置和团队投入 | 团队实际账单与记录 |
GitHub 文档说明,私有仓库托管 Runner 的计费分钟会向上取整到整分钟;自托管 Runner 没有可计费分钟。把账单金额和工作流使用记录对照,避免把“没有分钟费”误读成“没有运行成本”。
环境控制:需要固定工具链时,责任也随之转移
哪些构建适合继续使用 GitHub 托管 macOS Runner? 当工作流可依赖官方提供的镜像和工具、无需特殊主机状态,也不要求直接接入团队私有网络时,托管方案通常更省去机器维护环节。GitHub 提供不同系统和 Runner 类型,但具体镜像、架构及可用功能要以托管 Runner 参考文档为准。
如果项目必须固定 macOS、Xcode 或其他依赖版本,或者需要自定义预装环境,自托管会给团队更多主机侧控制权;相应地,团队也要负责维护镜像与软件状态。自托管 Runner 文档说明这类机器由使用方部署和管理。控制权增加不等于构建必然更快或更稳定,必须用自己的工作流验证。
照着做环境一致性验证:
- 从常用仓库里选一条代表性工作流,保留现有构建步骤和依赖清单。
- 记录托管 Runner 的镜像、工具版本、依赖安装过程和构建结果。
- 在自托管 Mac 上运行同一工作流,记录环境初始化、安装与更新所需的操作。
- 对照构建产物、失败日志和后续维护动作,找出需要团队自行承担的差异。
- 如果结果不一致,先定位镜像、工具版本或初始化步骤,不要直接把差异归因于 Runner 性能。
弹性:用排队记录识别稳定负载和任务波峰
托管 Runner 会由 GitHub 提供运行环境;自托管方案则要求团队安排可用主机和任务路由。公开的 Runner 并发限制能告诉你产品边界,却不能直接推算你们的构建速度或实际排队时间。工作流历史可用于判断是否受并发或排队影响,GitHub 也提供按 Runner 类型查看使用和性能指标的组织级指标说明。
从工作流记录看出是否需要混合部署:
- 汇总每条工作流的运行频率、等待时间和失败情况。
- 标出集中触发的时段,区分常规提交、发布构建和临时批量任务。
- 观察峰值期间的排队记录,并确认是否与并发限制有关。
- 把持续、可预测的工作流与偶发峰值任务分开测算。
- 在小范围试点中记录账单、等待时间、维护投入和失败情况,再决定哪些工作流迁移。
GitHub 托管标准 Runner 的单个作业最长执行时间为 6 小时;自托管作业在队列中超过 24 小时会自动取消。前者适合检查长作业是否触及产品限制,后者提醒团队:自托管机器离线或没有匹配 Runner 时,排队也可能影响发布流程。具体限制以官方并发限制表为准。
运维责任:不要把“免维护”或“完全可控”当作绝对结论
托管方案减少了团队对 Runner 主机的直接维护,但工作流、依赖和构建失败仍需要团队排查。自托管方案则把机器可用性、操作系统与工具链更新、Runner 在线状态和故障恢复也纳入日常职责。
如果自托管节点依赖内部网络或定制维护流程,应先明确由谁响应主机故障、谁检查环境更新、谁处理空闲资源,以及构建失败如何分辨是代码还是环境问题。反过来,若没有人负责这些事项,自托管的低分钟费用可能被额外的运维投入抵消。Runner 类型与管理方式的差异也可参考GitHub Runner 概念说明。
⚠️ 计划权益、费率、并发限制和可用 Runner 类型可能调整。成本结论应采用当前账单与实际记录;公开规格不能替代团队试点,也不能证明某种方案必然更快或更稳定。
用决策矩阵确定托管、自托管或混合方案
托管和自托管 Runner 可以并行用于不同工作流。例如,稳定且需要固定环境的构建可以交给自托管节点,临时峰值或不值得常驻占用机器的任务则可继续使用托管 Runner。是否适用,要根据工作流依赖、账单和团队维护能力验证;GitHub 对大型托管 Runner 的产品能力和规则另有说明,不能直接视为标准 Runner 的同一配置。(大型托管 Runner 文档)
| 选项 | 更适合的负载画像 | 主要收益 | 选型前要确认 |
|---|---|---|---|
| GitHub 托管 macOS Runner | 构建负载波动,团队希望少维护主机 | 减少自管机器与系统维护工作 | 适用计费、并发边界、镜像和工具链是否满足工作流 |
| 自托管 Mac Runner | 构建频繁且持续,需要控制环境或访问内部网络 | 自行管理主机环境与任务路由 | 主机费用、闲置容量、故障响应和持续维护人力 |
| 混合部署 | 同时有稳定构建与集中出现的峰值任务 | 按工作流划分机器控制与弹性需求 | 路由规则、账单归属、排队记录与故障归因 |
正式调整生产工作流前,先抽取代表性任务做试点,并把实测账单、等待时间、维护投入和失败情况填入成本表。若持续维护成本超过团队可承担范围,先保留托管 Runner;若内部网络、固定环境或持续负载确实要求自管,再评估自托管或混合方案。需要梳理远程 Mac 的交付和连接方式时,可先看NowMini 的使用指南与连接说明。
GitHub 托管方案的主要代价,是用量与计费规则需要持续核对、环境控制受 Runner 选项约束,峰值并发也要看账户限制;自购 Mac 则需要承担采购、闲置和维护工作。若团队决定采用自托管,但希望避免自行采购并管理实体机器,可以核实 NowMini 当前实际可用的远程 Mac 方案与交付信息,再对照团队账单和工时判断是否适合。可通过联系 NowMini了解具体情况;若负载长期稳定且需要专用物理接口,自行采购也可能更合适。
用 NowMini M4 搭建自托管 macOS Runner
每个订单对应一台独享物理 Mac Mini M4,为 iOS 与 macOS 构建提供稳定、可控的执行环境。
