2026年企业Mac CI:同一裸金属上 GitLab Runner 与 GitHub Actions 自托管 Runner 共存

团队同时用 GitLab CIGitHub ActionsApple Silicon 裸金属一机两用时,难在槽位争用、标签误配、凭据串味、NVMe 写放大。下文对照并发、标签、密钥、缓存分区;并链 Bazel/Gradle NVMe 分区CLT 与 Xcode.app 磁盘口径

一、并发配额:两套调度器共享同一 CPU 内存

GitLab Runnerconcurrent / limitGHA 用 Runner 组与组织策略限并发。单机共存时两边上限之和须低于「核数 + 少量缓冲」并留模拟器内存,否则排队正常但总时长抖——多为过度订阅

口诀:整机硬上限先定,再给 GL/GHA 软切片。

二、标签路由:避免同一标签被两边抢走

GitLab 用 tags;GHA 用 runs-on 自托管标签集。命名空间化(如 gl-ios / gha-ios)并写全标签,避免误配到另一平台;Runner 名带前缀便于对日志。

三、密钥隔离:两套 PAT、两套系统用户与钥匙串

最稳是为两套 Runner 各建独立用户或独立 HOME~/.gitlab-runner~/actions-runner);Keychainmatch 凭据分库。勿用泛名 CI_TOKEN,改标 GITLAB_OAUTH_TOKEN / GH_TOKEN 便于审计追责。

四、NVMe 缓存分区:DerivedData、Actions 缓存与 GitLab cache

APFS 卷或子目录拆开 DerivedDataActions _workGitLab cache;只读依赖单独前缀。await 高而 CPU 闲多为写热点错配(同 Bazel 分区篇)。按 Job 设 TTL,避免双平台同删一棵树。

五、落地 FAQ

  • 能共用一个 Xcode 吗?可以;固定 DEVELOPER_DIR 与镜像版本,升级时两台 Runner 同步冻结。
  • 谁先吃满磁盘?看谁未设缓存上限;先卷级配额告警再扩容。
  • 合规分池?标签分流不同注册或拆机;单机混跑须写明数据驻留边界。

独占裸金属:Mac mini 上把双 Runner 基线跑稳

双 Runner 最吃稳定 I/O低签编漂移Apple Silicon 统一内存扛并行编译与模拟器;macOS 配 Xcode 同厂;Mac mini 待机约 4WGatekeeper、SIP、FileVault 利无人值守。要把并发配额与 NVMe 分区先在单机跑通再扩池,Mac mini M4 仍是 2026 年高性价比起点——打开 Macstripe 首页 即可按需开通独占节点。