2026 多 Mac 自托管 Runner 并行 CI 与 GitHub Actions Cache 规划

2026 年常见形态是多台 Mac 自托管 Runner并行接 GitHub Actions:既要吃满算力,又要避免缓存踩踏、磁盘爆红与产物堆积。actions/cache跨 Job 的 tarball 往返,本地持久盘管大块热目录(DerivedData、依赖与工具链镜像)。并行一上来,先爆的往往是磁盘与 inode。若你在做整池容量与弹性评估,可先读 延伸阅读:企业 Mac CI 资源池选型

一、Actions Cache 与本地持久盘:怎么分工

远端 Cache适合可哈希的小中体积目录:打成 tarball 上传,Runner 漂移也能命中;体积大时上下行耗时,键错了会脏命中。本地持久卷适合解压贵、读频繁的大目录:固定挂载点再在流水线里软链;热读快,但换机要单独迁移。cache key 建议绑定锁文件 digest + Xcode 主版本 + Runner OS;本地卷只放可重建但昂贵的中间态,密钥不进共享盘明文久存。

实操建议:不要两份全量长期并存:要么远端为主本地短 TTL,要么本地为主远端只存小键。上线前用同一仓库在高峰窗口压测一轮命中与磁盘曲线,比只看文档参数可靠。

二、并行下的竞态锁:目录别共享错了

多 Job 同机最怕同写 DerivedData/Pods 全局路径:随机编译失败、索引损坏。Runner 虽有 workspace 隔离,硬编码共享路径等于自拆隔离。修法:每 Job 子目录、对不可重入段用 flock,或用维护窗口预拉依赖;矩阵 label 打到同一批机器会放大热点冲突。Actions 矩阵与权限清单可参考 OpenClaw 与 GitHub Actions 集成手册

三、磁盘打满:监控阈值比「事后 df」有用

磁盘常呈阶梯式掉量:多开并行或加模拟器镜像几小时就吃满。除系统盘外盯 _work、日志与 CoreSimulator。建议80%暂停领新 Job,90%强制幂等清理:先旧 workspace,再 LRU 本地 cache,最后动共享卷冷数据。

四、产物清理:保留窗口与「谁负责删」

产物别长期堆在 Runner:上传制品库只留元数据,或在 PR 关闭后回收。池内分清平台策略业务白名单;iOS 常见「main 保留 N 天、PR 保留 M 小时」,dSYM 留存与法务对齐。清理失败即把节点标为维护,避免带病接 Job。

五、资源池 FAQ(落地版)

  • Cache 与本地盘会重复占空间吗?会,二选一主存,避免双份全量。
  • 多分支脏命中?key 里含分支、锁文件 digest,main 合并后主动失效旧 key。
  • 磁盘报警还能跑吗?不建议硬撑,链接与模拟器对最后几 GB 极敏感。
  • 多 Xcode 版本?独立路径前缀 + label 维度写死版本。

在 Mac mini 上把吞吐跑稳,比单纯加机更划算

并行 CI 是时间换空间:缓存与磁盘没理顺,加机只会更快写满盘。Mac mini 上 Apple Silicon 内存带宽高、待机功耗低,适合 7×24 池节点;macOS 与 Xcode 原生组合减少长尾故障,静音低崩溃利夜间批量;Gatekeeper、SIP、FileVault 也降低无人值守风险。

峰值可接物理独占云 Mac,先到 Macstripe 首页 对机型与区域。把水位与清理跑通后,再在本地落常驻节点,TCO 常优于老旧工作站——若要把 Runner 目录与缓存策略长期固化在桌面侧验证,Mac mini M4 仍是 2026 年最值得优先下单的高性价比起点。