团队同时用 GitLab CI 与 GitHub Actions,Apple Silicon 裸金属一机两用时,难在槽位争用、标签误配、凭据串味、NVMe 写放大。下文对照并发、标签、密钥、缓存分区;并链 Bazel/Gradle NVMe 分区、CLT 与 Xcode.app 磁盘口径。
一、并发配额:两套调度器共享同一 CPU 内存
GitLab Runner 用 concurrent / limit;GHA 用 Runner 组与组织策略限并发。单机共存时两边上限之和须低于「核数 + 少量缓冲」并留模拟器内存,否则排队正常但总时长抖——多为过度订阅。
二、标签路由:避免同一标签被两边抢走
GitLab 用 tags;GHA 用 runs-on 自托管标签集。命名空间化(如 gl-ios / gha-ios)并写全标签,避免误配到另一平台;Runner 名带前缀便于对日志。
三、密钥隔离:两套 PAT、两套系统用户与钥匙串
最稳是为两套 Runner 各建独立用户或独立 HOME(~/.gitlab-runner 与 ~/actions-runner);Keychain 与 match 凭据分库。勿用泛名 CI_TOKEN,改标 GITLAB_OAUTH_TOKEN / GH_TOKEN 便于审计追责。
四、NVMe 缓存分区:DerivedData、Actions 缓存与 GitLab cache
APFS 卷或子目录拆开 DerivedData、Actions _work、GitLab cache;只读依赖单独前缀。await 高而 CPU 闲多为写热点错配(同 Bazel 分区篇)。按 Job 设 TTL,避免双平台同删一棵树。
五、落地 FAQ
- 能共用一个 Xcode 吗?可以;固定
DEVELOPER_DIR与镜像版本,升级时两台 Runner 同步冻结。 - 谁先吃满磁盘?看谁未设缓存上限;先卷级配额告警再扩容。
- 合规分池?标签分流不同注册或拆机;单机混跑须写明数据驻留边界。
独占裸金属:Mac mini 上把双 Runner 基线跑稳
双 Runner 最吃稳定 I/O与低签编漂移:Apple Silicon 统一内存扛并行编译与模拟器;macOS 配 Xcode 同厂;Mac mini 待机约 4W,Gatekeeper、SIP、FileVault 利无人值守。要把并发配额与 NVMe 分区先在单机跑通再扩池,Mac mini M4 仍是 2026 年高性价比起点——打开 Macstripe 首页 即可按需开通独占节点。