- 别只看 GitHub 账单——排队和 merge 前等待是隐性成本,常常比 macOS 分钟费更贵
- Shadow 对照:warm P95 14:12 → 6:05,排队 4:20 → 0(见 主轴 Benchmark)
- 自评 ≥25/40 → 先 Shadow 7 天,再决定买 M4、租 Cloud Mac 或混合
- 月构建 <50 次、几乎不排队 → 继续
macos-latest通常更划算
完整对照数据 → GitHub Actions 优化主轴 · Benchmark
「Mac mini M4 做 CI runner 划不划算?」——工程团队问的是性能,负责人问的是 ROI。两篇答案经常对不上:芯片规格很好看,财务模型算不过账;或者账单只有几百美元,但工程师每天在 Slack 里等 CI 绿。
这篇是 GitHub Actions macOS CI 集群里的转化专题(子文 D):把 构建为什么慢、缓存怎么配 里的技术结论,换算成美元和工程师小时,再给出可自填的决策框架。
1. 为什么「划算」不能只看 GitHub 分钟费
财务看到的往往是:
macOS runner 分钟数 × 单价 = 月 CI 账单
工程师体感的却是:
墙钟 = 排队 + 构建 + 测试 + 偶尔重跑
GitHub Actions 对排队时间通常不计 macOS 分钟费,但计入 merge 前的等待。发版周多等 8 分钟 × 40 次 PR,就是 5+ 工程师小时——账单里看不见,Standup 里天天提。
14 天 Shadow 双轨里,独享 Mac mini M4 带来的不只是 warm P95 −57%,还有排队归零和方差收敛(σ −40%)。ROI 模型必须把这两项算进去,否则容易得出「才多花 $200/月,不值得买机器」的错误结论。
技术拆解见 主轴 P95 瀑布图:排队单项约 −4:50,缓存约 −1:40。
2. 四维评分模型(0–10 × 4)
在跑 TCO 表格之前,先用四维自评——避免「团队其实没那么痛,却买了三台 Mac mini 吃灰」。
| 维度 | 评什么 | 9–10 分信号 | 0–3 分信号 |
|---|---|---|---|
| ① 排队痛点 | macos-latest 等 runner 多久 |
日均排队 >4 分钟;发版周 P95 >8 分钟 | 几乎从不排队;墙钟 ≈ 纯构建 |
| ② CI 频率 | 日 PR / 日构建量 | 日 PR 25–40+;月构建 >500 | 日 PR <5;月构建 <80 |
| ③ cache 复杂度 | CocoaPods / SPM / 多 scheme | 大 Pod 仓、DerivedData 常 miss | 纯 SPM 小项目;托管 cache 够用 |
| ④ 维护能力 | 谁管 runner、证书、磁盘 | 有平台/DevOps;能 7×24 值班 | 纯移动端,无人懂 macOS 运维 |
- 排队痛点 9/10——日均排队 4:20,发版周更久
- CI 频率 8/10——日 PR 约 30,月构建 ~600
- cache 复杂度 7/10——CocoaPods 1.15 + 多 target
- 维护能力 6/10——有兼职平台同学,非 7×24
结论:≥25 → 建议 Shadow 双跑 7–14 天,用自家数据验证后再采购。
分数段怎么解读
- <15/40:继续
macos-latest,优化 workflow 即可 - 15–24:先读 缓存专题,再 Shadow 小规模试跑
- ≥25/40:Shadow → 对比本文 TCO → 买 / 租 / 混合三选一
- ≥32/40:高置信度;可并行规划多 runner 架构(子文 E 筹备中)
3. 三种 TCO:托管 · 自购 · 租用
同一支 iOS 团队,三种路径的成本结构完全不同——不是简单比月租数字。
| 路径 | 显性成本 | 隐性成本 | 适合谁 |
|---|---|---|---|
| macos-latest 托管 | macOS 分钟费(~$0.08/min) | 排队墙钟、cache miss 波动、Xcode 被动升级 | 月构建 <150、低频 side project |
| 自购 Mac mini M4 | 硬件 $999–1,599 + 电 + 网络 | 运维人力、机房、证书、磁盘、折旧 | 3 年+ 稳定高频、有 DevOps |
| 租 Cloud Mac 独享 | 月租 ~$89–120(因配置而异) | 低——预装 runner、持久盘、远程接入 | 想立刻消除排队、无自运维 |
自购 3 年 TCO 粗算(M4 Pro 24GB):硬件 ~$1,299 + 运维(每月 2–4 小时 × 36 月)+ 电与网络 ≈ $3,500–4,200,折合 $97–165/月。Break-even 与租 Cloud Mac 对比约 15–27 个月——详见 月构建 500 次买租专题。
4. 可填公式:日 PR × 等待 → 工程师小时
把「等待」换成钱,用这个最小模型(单位可换成本地货币):
工程师小时损耗 = 日 PR 数 × 每次额外等待分钟 ÷ 60 × 22 工作日 美元损耗 = 工程师小时损耗 × 混合时薪($/h) 示例: 日 PR = 30 额外等待 = 5 分钟/PR(排队 + 构建波动,相对独享机) 时薪 = $50 小时 = 30 × 5 ÷ 60 × 22 = 55 h/月 损耗 = 55 × 50 = $2,750/月
同一团队 GitHub macOS 分钟费可能只有 $300–500/月——隐性成本可以是账单的 3–5 倍。ROI 模型里这一项必须和 TCO 放在同一张表。
「额外等待」从哪来?Shadow 双跑同一 commit:macos-latest 墙钟 − self-hosted 墙钟,按 warm build 分开算(定义见 cold/warm 专题)。
5. 案例:日 30 PR 团队算一笔账
沿用 Shadow 案例数据(187 PR / 14 天,Xcode 16.2,CocoaPods 1.15.2):
| 项目 | macos-latest | 独享 M4 self-hosted |
|---|---|---|
| warm P95 构建 | 14:12 | 6:05 |
| 平均排队 | 4:20 | ~0 |
| 每次 PR 墙钟(粗算) | ~18 分钟 | ~6 分钟 |
| 日 30 PR 墙钟合计 | ~9 小时 | ~3 小时 |
| GitHub 分钟费(仅构建) | ~$320/月量级 | ~$0(self-hosted) |
| 租 Cloud Mac 独享 | — | ~$89–120/月 |
节省 ~6 小时/天墙钟,按 50% 算有效工程师等待(并非全程盯 CI),仍约 3 工程师小时/天。22 工作日 × 3h × $50 ≈ $3,300/月 量级——租一台 Cloud Mac 的 ROI 非常清晰。
若团队已有 Mac mini 且评分④维护能力 ≥7,自购路径的边际成本主要是电与运维时间;若无运维,租比买更快回本。
6. 混合模型:日常租 + 发版周加节点
不必二选一。常见混合:
- Baseline:1 台 Cloud Mac 跑日常 PR(排队归零、DerivedData 有固定家)
- Peak:发版周临时加第二台节点,或保留
macos-latest作 overflow fallback - Desktop + Cloud:办公室一台 M4 给本地开发;CI 专用云节点,避免抢磁盘 IO
混合模型的 ROI 关键:peak 节点按周租、baseline 按月——比全年养三台物理机更贴合真实负载。选型背景见 Mac Cloud Server 是什么、本地 vs 远程租赁 FAQ。
7. 风险、fallback 与迁移心理
ROI 模型只算收益不够,还要算翻车成本:
- 单点故障:一台 self-hosted 挂掉 = 全 team CI 红。Mitigation:fallback 到
macos-latest或第二台 runner - 证书 / 密钥:发版机与工作机混用风险。Mitigation:CI 专用机 + 最小权限 Keychain
- 磁盘满:DerivedData 无水位监控 → 神秘失败。Mitigation:1TB 数据盘 + cron 清理策略(cache 路径见 缓存专题)
- 迁移心理:「买了机器就要用满」——Shadow 阶段只跑 test job,主 merge 仍走托管,降低切换焦虑
- Week 1–2:Shadow 双跑,只记录 metrics,不切换 merge 门禁
- Week 3:非关键 branch 走 self-hosted
- Week 4+:main merge 切换;保留 macos-latest fallback job
8. 决策树:现在该做什么
- 填四维评分 → <15 停,优化 workflow;≥25 继续
- 跑 Shadow 7 天 → 拿到 warm P95、queue time、失败率
- 填等待成本公式 → 与租/买 TCO 对比
- 无 DevOps → 优先 租 Cloud Mac;有 3 年规划 → 算自购 break-even
- 采购后 → 读架构专题(子文 E)做多 runner / 标签 / fallback
9. 常见问题(FAQ)
M4 做 runner 到底值不值?
看评分和 Shadow 数据,不看芯片 PPT。日 PR <10、不排队 → 不值;日 PR 20+、warm P95 >10 分钟、排队常 >3 分钟 → 大概率值。
买还是租?
无运维、想本周消除排队 → 租。有机房、DevOps、3 年+ 高频 CI → 买。中间态 → 混合。价格参考 Mac mini 价格页。
没数据怎么开始?
复制 ios-ci.yml,加 self-hosted job,双跑 7 天。步骤 → Shadow 快速上手。
什么时候继续 macos-latest?
月构建 <50、排队可忽略、团队无人维护 macOS——继续托管是理性选择,不必被「人人 self-hosted」带节奏。
和「月 500 次构建」那篇有什么区别?
500 次/月专题 是固定量级的 TCO 计算器;本篇是通用评分 + 公式,任何团队都能自填。
10. 结论
Mac mini M4 跑 CI runner 划不划算,答案不在 Apple 官网,而在你团队的排队、频率、cache 和维护能力四维分数里,以及在 Shadow 实测的 warm P95 与墙钟数据里。
记住三句话:
- 账单 ≠ 总成本——等待是隐性大头
- ≥25/40 先 Shadow,再买或租
- 无运维租 Cloud Mac;有长期规划再算自购 break-even
Shadow 跑完数据了?下一步在这
Vuncloud Cloud Mac M4 独享节点:预装 actions-runner、1TB 数据盘、DerivedData / Pods 持久保留——适合「先租验证 ROI、再决定是否买机」的路径。