Vuncloud 博客
← 返回机房手记专栏

GitHub Actions macOS self-hosted runner 优化实战:P95 降 57% + iOS CI 提速完整方案

GitHub Actions macOS / iOS CI 优化总览 · warm P95 14:12 → 6:05 · 分话题深度文见下方导航 ·约 8 分钟阅读

开发团队协作讨论 GitHub Actions macOS self-hosted runner 与 iOS CI 性能优化
GitHub Actions macOS CI 很慢?

若你搜的是「GitHub Actions macOS 慢」「iOS CI 卡住」「macos-latest queued」,常见症状是:

  • PR 合并前多等 5–10 分钟排队(发版周更久)
  • xcodebuild / pod install 波动巨大,同 commit 差 2–3 倍
  • 工程师体感:「CI 像抽奖,不敢在周五下午 merge」

👉 本文是总览:对照结果与阅读路径。排队、构建慢、缓存、买租决策、架构——各有一篇专题展开,按需跳转即可。

Shadow 对照结果(14 天)
  • warm build P95macos-latest 14:12 → 独享 Mac mini M4 6:05-57%
  • 排队:平均 4:20 → 0
  • 方差 σ3:20 → 1:55(约 -40%

下文保留对照结果摘要与 Shadow 双跑步骤;缓存 workflow、评分模型、架构清单在对应专题里展开。

先说结论(工程向)
  • warm P95 14:12 → 6:05;σ -40%;排队归零
  • 优化顺序:排队 → 分清 cold/warm → 缓存 → 并发隔离 → 硬件
  • 复现对照:Shadow 双跑上手
给负责人看的

若团队日 PR > 20macOS CI 经常排队,建议用 买还是租 专题里的成本模型算一笔账。月构建 <50 次可继续用 macos-latest

按症状跳转

排队多 → macos-latest 为什么会排队 · 构建忽快忽慢 → iOS CI 构建很慢怎么办 · 要算账 → 买还是租 · 要看数据 → 本文 瀑布图对照结果

-57%
P95 墙钟时间
-40%
墙钟标准差(方差收敛)
187
14 天 PR 对照样本

1. GitHub Actions macOS / iOS CI 为什么慢?

不同团队卡在不一样的地方。本文只给总览——按你的症状跳到对应专题:

你在搜什么 典型症状 去读
macos-latest queued / github actions macos slow PR 多等 4–8 分钟,发版周更久 macos-latest 为什么会排队
xcodebuild slow / ios ci slow fix 同 commit 有时 4 分有时 12 分 iOS CI 构建很慢怎么办
cocoapods cache / deriveddata cache ci pod install 3–6 分钟跳动 iOS CI 缓存优化(CocoaPods / SPM / DerivedData)
self-hosted runner roi / mac mini ci 要不要买/租 Mac mini? 买 Mac mini 还是租 Cloud Mac
self-hosted architecture / multi runner 多机并发、备用 runner、标签规划 self-hosted 架构怎么搭

若你只想看「换 runner 能快多少」,留在本文 对照结果瀑布图

2. 对照结果:self-hosted Mac mini M4 提升多少

8 人 iOS 团队 · CocoaPods · 日 PR 25–40 · 未改业务代码,仅换 runner。warm build 核心数据:

指标macos-latestMac mini M4变化
P5011:385:22-54%
P9514:126:05-57%
σ3:201:55-40%
max22:408:30-62%
失败率(14 天)8.0%3.2%

环境摘要:8 人 iOS 团队 · CocoaPods · 日 PR 25–40 · 两侧 Xcode 16.2 对齐 · Mac mini M4 16GB + 1TB 数据盘 · 14 天 187 PR shadow 双跑。cold/warm 拆分见 构建波动专题;复现见 Shadow 快速上手

样本分布 · self-hosted warm(n=162)
4:00–5:00 |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 52%
5:00–6:00 |■■■■■■■■■■■■■■■■■■ 28%
6:00–7:00 |■■■■■■ 10%
P95 6:05   |■■■■■■■■■■■■■■

3. P95 时间瀑布图:14:12 → 6:05(-57%)

传播用核心图——8 分 07 秒节省从哪来:

P95 墙钟瀑布(warm build)
macos-latest  P95 ████████████████████████ 14:12
                              │
  排队消除      −4:50  ████████████░░░░░░░░░░░░
  cache/Pods    −1:40  ████░░░░░░░░░░░░░░░░░░░░
  xcodebuild    −1:15  ███░░░░░░░░░░░░░░░░░░░░░
  签名/上传     −0:20  █░░░░░░░░░░░░░░░░░░░░░░░
                              ▼
self-hosted   P95 ██████████ 6:05  (−57%)

排队单项约 −4:50 → 读 排队专题。缓存约 −1:40 → 读 iOS CI 缓存优化

4. 按问题选专题

下面按常见排查顺序排列——不必全读,从和你最相关的那篇开始即可:

推荐阅读顺序
PR 老在排队?
  → macos-latest 为什么会排队
  → 或先看本文对照数据 + 瀑布图

构建时间忽快忽慢?
  → iOS CI 构建很慢怎么办
  → GitHub Actions iOS CI 缓存优化

纠结买机还是租 Cloud Mac?
  → 本文 Shadow 对照数据
  → 买 Mac mini 还是租 Cloud Mac(专题撰写中)
  → Cloud Mac 套餐 / CI/CD 接入说明

要上多机、备用 runner?
  → self-hosted 架构怎么搭(专题撰写中)

5. 专题导航

每篇只讲一个具体问题。本文负责对照数据总览与跳转。

专题 适合谁
macos-latest 为什么会排队 PR 经常在队列里干等
iOS CI 构建很慢怎么办 同 commit 构建时间差 2–3 倍
GitHub Actions iOS CI 为什么这么慢?缓存优化 需要 workflow 示例、配 cache key
Mac mini M4 跑 CI Runner 真的划算吗?ROI 模型 要算买机 vs 租 Cloud Mac
self-hosted Mac mini 架构 多 runner、标签、备用路径

延伸阅读:为什么 iOS CI/CD 跑在 Mac mini M4 上 · 换 M4 Pro 能省多少全员工时 · Cloud Mac 接 CI/CD 指南

6. Shadow 双跑上手

下面是最小复现步骤。完整 workflow、灰度清单见 架构专题;缓存 workflow 见 缓存优化专题

  1. 复制 ios-ci.ymlios-ci-shadow.yml,增加 runs-on: [self-hosted, macos-m4-ios] job
  2. macos-latest 对每次 PR 用相同 commit SHA 双跑 7–14 天
  3. 记录墙钟 P50/P95、queue time;warm build 单独算 P95(定义见构建波动专题
  4. 对比失败率后,再读 买还是租 专题做决策
Shadow 触发(节选)
on:
  pull_request:
    branches: [main, release/*]
jobs:
  ios-hosted:
    runs-on: macos-latest
  ios-shadow:
    runs-on: [self-hosted, macos-m4-ios]
    # 相同 steps · 相同 SHA

7. 常见问题

GitHub Actions macOS self-hosted runner 能比 macos-latest 快多少?

本次 warm 构建 P95 −57%(14:12→6:05),σ −40%。见 对照结果;复现见 Shadow 双跑上手

GitHub Actions macOS runner 为什么会排队?

共享托管池 + 发版周高并发。排队不计费但计入墙钟。完整拆解 → 排队专题

self-hosted runner 会不会更不稳定?

取决于运维:磁盘水位、runner 守护、签名材料。Shadow 期间可对比失败率;本文 14 天失败率 8.0% → 3.2%。保留 macos-latest 作备用路径,可降低切换风险。

Mac mini 做 CI runner 是否值得?

日 PR 20+ 且排队恶化时值得评估。月构建 <50 可继续托管。评分模型与 TCO → 买还是租

GitHub macos-latest 有哪些限制?

共享队列、短生命周期工作区、缓存跨 job 不稳定、并发 I/O 争抢。无法固定 DerivedData 或消除排队。

iOS CI P95 怎么优化?

排队 → cold/warm → 缓存 → 并发 → 硬件。分步见 排队 · 构建波动 · 缓存优化

CocoaPods 缓存怎么优化?

完整 workflow 与 cache key 设计 → 缓存优化专题

迁移要多久?

准备 1–2 天 + shadow 7–14 天 + 灰度 3–5 天。先 shadow 只跑 test,再导签名。

8. 结论

换 self-hosted runner 后 warm P95 可从 14:12 压到 6:05,方差也明显收敛。本文给对照数据与瀑布拆解;排队、构建慢、缓存、买租决策、架构各有专题展开。先用 Shadow 双跑拿你们自己的数据,再决定要不要上独享 Mac。

算清楚再下单

建议路径:Shadow 双跑买还是租租用 Mac mini M4。Vuncloud 提供独享 M4(预装 Xcode、1TB 数据盘、runner 指引)。

CI/CD 接入说明 · 套餐价格 · 租用 Mac mini M4

机房手记 · iOS CI

从排队到买租决策,一篇总览

对照数据 · 瀑布图 · 专题导航

专题导航
限时优惠 点击查看套餐