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」

👉 本文是總覽:Benchmark 結果與閱讀路徑。佇列、建置慢、快取、ROI、架構——各有一篇專題文展開,按需跳轉即可。

Shadow 對照結果(14 天)
  • warm build P95macos-latest 14:12 → 獨享 Mac mini M4 6:05-57%
  • 排隊:平均 4:20 → 0
  • 變異數 σ3:20 → 1:55(約 -40%

下文保留 Benchmark 摘要與 Shadow 快速上手;cache YAML、評分模型、架構 checklist 在對應專題文裡展開。

TL;DR · 工程版
  • warm P95 14:12 → 6:05;σ -40%;排隊歸零
  • 優化順序:排隊 → cold/warm 分離 → 快取 → 並發隔離 → 硬體
  • 復現:Shadow 快速上手
TL;DR · 管理層版

若團隊日 PR > 20macOS CI 經常排隊 → 讀 ROI 專題文 填成本模型。月建置 <50 次可繼續 macos-latest

TL;DR · 結論決策

按症狀跳轉:排隊 → macos-latest 為什麼會排隊 · 建置忽快忽慢 → xcodebuild 波動 · 要算帳 → 買租 ROI · 要資料 → 本文 瀑布圖 + Benchmark

-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 分鐘跳動 Pods/SPM/DerivedData 快取實戰
self-hosted runner roi / mac mini ci 要不要買/租 Mac mini? 買租 ROI 怎麼算
self-hosted architecture / multi runner 多機並發、fallback、標籤 self-hosted 架構怎麼搭

若你只想看「換 runner 能快多少」,留在本文 Benchmark瀑布圖

2. Benchmark 結果: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 → 讀 快取實戰

4. 按你的問題選文章

這套專題按常見排查順序組織——不必全讀,從你最痛的那篇開始:

推薦閱讀順序
排隊很痛?
  → macos-latest 為什麼會排隊(籌備中)
  → 本文 Benchmark + 瀑布圖

建置忽快忽慢?
  → iOS CI 建置很慢怎麼辦(已發布)
  → Pods/SPM/DerivedData 快取實戰(已發布)

要決定買還是租?
  → 本文 Shadow 資料
  → 買租 ROI 怎麼算(籌備中)
  → Cloud Mac 套餐 / CI/CD FAQ

要上多機、fallback?
  → self-hosted 架構怎麼搭(籌備中)

5. 專題導航

每篇只講一個具體問題,獨立成文。本文負責 Benchmark 總覽與跳轉。

專題 適合誰 狀態
macos-latest 為什麼會排隊 PR 經常在佇列裡乾等 籌備中
iOS CI 建置很慢怎麼辦 同 commit 建置時間差 2–3 倍 已發布
大幅提速 · Pods/SPM/DerivedData 快取實戰 想抄 YAML、配 cache key 已發布
self-hosted runner 值不值得 要算買機 vs 租 Cloud Mac 籌備中
self-hosted Mac mini 架構 多 runner、標籤、fallback 籌備中

已發布關聯文:Mac mini M4 CI 入門 · 工時 ROI · CI/CD FAQ

6. Shadow Benchmark 快速上手

下面是最小復現步驟。完整 workflow、灰度 checklist 見 架構專題;cache YAML 見 快取實戰

  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. 對比失敗率後,再讀 買租 ROI 做決策
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. 常見問題(FAQ)

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

本次 warm build P95 −57%(14:12→6:05),σ −40%。見 Benchmark;復現見 Shadow 快速上手

GitHub Actions macOS runner 為什麼會排隊?

共享託管池 + 發版週高並發。排隊不計費但計入牆鐘。完整拆解 → 排隊專題

self-hosted runner 會不會更不穩定?

取決於維運:磁碟水位、runner 守護、簽名材料。shadow 期間可對比失敗率;本文 14 天失敗率 8.0% → 3.2%。保留 macos-latest fallback 可降低心理風險。

Mac mini 做 CI runner 是否值得?

日 PR 20+ 且排隊惡化時值得評估。月建置 <50 可繼續託管。評分模型與 TCO → 買租 ROI

GitHub macos-latest 有哪些限制?

共享佇列、短生命週期工作區、快取跨 job 不穩定、並發 I/O 爭搶。無法固定 DerivedData 或消除排隊。

iOS CI P95 怎麼優化?

排隊 → cold/warm → 快取 → 並發 → 硬體。分步見 排隊 · 建置波動 · 快取實戰

CocoaPods cache 怎麼優化?

完整 YAML 與 key 設計 → cache 專題

遷移要多久?

準備 1–2 天 + shadow 7–14 天 + 灰度 3–5 天。先 shadow 只跑 test,再導簽名。

8. 結論

換 self-hosted runner 後 warm P95 可從 14:12 壓到 6:05,變異數也明顯收斂。本文給 Benchmark 與瀑布拆解;排隊、建置慢、快取、ROI、架構各有專題展開。先用 Shadow 雙跑拿你們自己的資料,再決定要不要上獨享 Mac。

算清楚 ROI 再下單

建議路徑:Shadow 雙跑買租 ROI租用 Mac mini M4。Vuncloud 提供獨享 M4(預裝 Xcode、1TB 資料碟、runner 指引)。

CI/CD 接入 FAQ · 套餐價格 · 租用 Mac mini M4

機房手記 · iOS CI

從排隊問題到 ROI 決策

Benchmark · 瀑布圖 · 專題導航

專題導航
限時優惠 點擊查看套餐