Vuncloud Блог
← К полевым заметкам

Оптимизация runner GitHub Actions macOS: P95 −57 % + playbook iOS CI

Обзор оптимизации GitHub Actions macOS / iOS CI · warm P95 14:12 → 6:05 · углубления по темам в навигации ниже ·~8 мин чтения

Инженерная команда анализирует оптимизацию производительности self-hosted runner GitHub Actions macOS и iOS CI
GitHub Actions macOS CI медленный?

Если вы искали GitHub Actions macOS slow, iOS CI stuck или macos-latest queued, скорее всего видите:

  • 5–10 лишних минут очереди перед merge (хуже в release week)
  • xcodebuild / pod install с дикой дисперсией — тот же commit, разброс 2–3×
  • Настроение команды: «CI как лотерея — в пятницу после обеда не мержим»

👉 Эта страница — обзор: результаты benchmark и маршруты чтения. Очередь, дисперсия сборки, cache, ROI и архитектура — у каждой темы своя статья; переходите к нужной.

Результаты shadow-сравнения (14 дней)
  • warm build P95: macos-latest 14:12 → выделенный Mac mini M4 6:05 (−57 %)
  • Очередь: в среднем 4:20 → 0
  • Дисперсия σ: 3:20 → 1:55 (около −40 %)

Ниже — сводка benchmark и shadow quick start. Cache YAML, scoring model и checklist архитектуры — в связанных тематических статьях.

Кратко · Engineering
  • warm P95 14:12 → 6:05; σ −40 %; очередь устранена
  • Порядок оптимизации: очередь → разделение cold/warm → cache → изоляция concurrency → железо
  • Воспроизвести: Shadow quick start
Кратко · Management

При 20+ PR/день и частой очереди macOS CI → читайте статью про ROI и заполните cost model. При <50 сборок/месяц macos-latest может хватить.

Кратко · Решение

По симптому: очередь → Почему macos-latest в очереди · дисперсия сборки → iOS CI тормозит · ROI → Купить vs арендовать · данные → waterfall + benchmark здесь.

-57%
Wall time P95
-40%
Станд. откл. wall time (сходимость дисперсии)
187
Выборок PR за 14 дней shadow

1. Почему GitHub Actions macOS / iOS CI медленный?

Команды застревают в разных местах. Эта страница остаётся на уровне обзора — переходите к теме, которая совпадает с вашим симптомом:

Что ищете Типичный симптом Читать
macos-latest queued / github actions macos slow PR ждёт 4–8 лишних минут; хуже в release week Почему macos-latest в очереди
xcodebuild slow / ios ci slow fix Тот же commit: то 4 мин, то 12 iOS CI тормозит
cocoapods cache / deriveddata cache ci pod install скачет 3–6 минут Гайд по cache Pods/SPM/DerivedData
self-hosted runner roi / mac mini ci Купить или арендовать Mac mini? ROI: купить vs арендовать
self-hosted architecture / multi runner Concurrency на нескольких машинах, fallback, labels Архитектура self-hosted

Если нужно только «насколько быстрее другой runner?», оставайтесь здесь: Benchmark и waterfall.

2. Результаты benchmark: насколько помогает выделенный Mac mini M4

iOS-команда 8 человек · CocoaPods · 25–40 PR/день · без изменений кода приложения, только смена runner. Данные warm build:

Метрикаmacos-latestMac mini M4Изменение
P5011:385:22-54%
P9514:126:05-57%
σ3:201:55-40%
max22:408:30-62%
Failure rate (14 дней)8.0%3.2%

Сводка окружения: iOS-команда 8 человек · CocoaPods · 25–40 PR/день · Xcode 16.2 на обеих сторонах · Mac mini M4 16 ГБ + том данных 1 ТБ · 14-дневный shadow dual-run на 187 PR. Разделение cold/warm: статья про дисперсию сборки; воспроизведение: Shadow quick start.

Распределение выборки · self-hosted warm (n=162)
4:00–5:00 |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 52%
5:00–6:00 |■■■■■■■■■■■■■■■■■■ 28%
6:00–7:00 |■■■■■■ 10%
P95 6:05   |■■■■■■■■■■■■■■

3. Waterfall времени P95: 14:12 → 6:05 (−57 %)

Главная диаграмма для шаринга — откуда 8m 07s экономии:

Waterfall wall time P95 (warm build)
macos-latest  P95 ████████████████████████ 14:12
                              │
  Очередь убрана −4:50  ████████████░░░░░░░░░░░░
  cache/Pods    −1:40  ████░░░░░░░░░░░░░░░░░░░░
  xcodebuild    −1:15  ███░░░░░░░░░░░░░░░░░░░░░
  Sign/upload   −0:20  █░░░░░░░░░░░░░░░░░░░░░░░
                              ▼
self-hosted   P95 ██████████ 6:05  (−57%)

Только очередь ≈ −4:50тема очереди. Cache ≈ −1:40гайд по cache.

4. Выберите статью под вашу проблему

Темы идут в типичном порядке troubleshooting — начните с того, что болит сильнее:

Рекомендуемый порядок чтения
Болит очередь?
  → Почему macos-latest в очереди (в подготовке)
  → Эта страница: benchmark + waterfall

Время сборки скачет?
  → iOS CI тормозит (опубликовано)
  → Гайд по cache Pods/SPM/DerivedData (опубликовано)

Решаете купить или арендовать?
  → Shadow-данные на этой странице
  → ROI: купить vs арендовать (в подготовке)
  → Тарифы Cloud Mac / FAQ CI/CD

Нужны multi-runner или fallback?
  → Архитектура self-hosted (в подготовке)

5. Навигация по темам

Каждая статья закрывает одну конкретную проблему. Эта страница даёт обзор benchmark и ссылки.

Тема Кому подходит Статус
Почему macos-latest в очереди PR застревают в очереди В подготовке
iOS CI тормозит Тот же commit — разброс времени сборки 2–3× Опубликовано
Ускорить iOS CI: cache Pods/SPM/DerivedData Скопировать YAML, настроить ключи cache Опубликовано
Стоит ли self-hosted runner? Расчёт: купить vs арендовать Cloud Mac В подготовке
Архитектура self-hosted Mac mini Multi-runner, labels, fallback В подготовке

Опубликованные связанные статьи: Primer CI Mac mini M4 · ROI engineering-hours · FAQ CI/CD

6. Shadow benchmark quick start

Ниже — минимальные шаги воспроизведения. Полный workflow и checklist rollout: тема архитектуры; cache YAML: гайд по cache.

  1. Скопировать ios-ci.ymlios-ci-shadow.yml; добавить job с runs-on: [self-hosted, macos-m4-ios]
  2. Dual-run каждый PR против macos-latest с тем же commit SHA 7–14 дней
  3. Записывать wall time P50/P95 и время очереди; считать warm build P95 отдельно (определение в iOS CI тормозит?)
  4. Сравнить failure rate, затем читать ROI: купить vs арендовать
Триггер shadow (фрагмент)
on:
  pull_request:
    branches: [main, release/*]
jobs:
  ios-hosted:
    runs-on: macos-latest
  ios-shadow:
    runs-on: [self-hosted, macos-m4-ios]
    # same steps · same SHA

7. FAQ

Насколько быстрее self-hosted runner GitHub Actions macOS по сравнению с macos-latest?

В этом прогоне: warm build P95 −57 % (14:12→6:05), σ −40 %. См. Benchmark; воспроизвести через Shadow quick start.

Почему runner'ы GitHub Actions macOS стоят в очереди?

Общий hosted pool + всплеск concurrency в release week. Время очереди не тарифицируется, но входит в wall time. Полный разбор → тема очереди.

Self-hosted runner'ы менее стабильны?

Зависит от ops: запас диска, надзор runner, signing assets. Сравнивайте failure rate в shadow; здесь за 14 дней 8,0 % → 3,2 %. macos-latest как fallback снижает воспринимаемый риск.

Стоит ли Mac mini как CI runner?

Имеет смысл при 20+ PR/день с ухудшающейся очередью. При <50 сборок/месяц hosted может хватить. Scoring model и TCO → ROI: купить vs арендовать.

Какие ограничения у GitHub macos-latest?

Общая очередь, эфемерные workspace, нестабильный cache между job'ами, конкуренция I/O. Нельзя закрепить DerivedData или убрать очередь.

Как оптимизировать P95 iOS CI?

Очередь → cold/warm → cache → concurrency → железо. Пошагово: очередь · дисперсия сборки · гайд по cache.

Как оптимизировать cache CocoaPods?

Полный YAML и дизайн ключей → гайд по cache.

Сколько длится миграция?

1–2 дня подготовки + shadow 7–14 дней + постепенный rollout 3–5 дней. Сначала shadow только с тестами, signing импортировать позже.

8. Итог

После перехода на self-hosted runner warm P95 снизился с 14:12 до 6:05, дисперсия заметно сузилась. Эта страница показывает benchmark и waterfall; очередь, дисперсия сборки, cache, ROI и архитектура — в отдельных статьях. Перед покупкой железа проведите shadow dual-run на своих данных.

Подтвердите ROI, затем закажите

Рекомендуемый путь: Shadow dual-runROI: купить vs арендоватьАрендовать Mac mini M4. Vuncloud предлагает выделенные узлы M4 (Xcode предустановлен, том данных 1 ТБ, гайд по настройке runner).

FAQ onboarding CI/CD · Тарифы и заказ · Арендовать Mac mini M4

Заметки дата-центра · iOS CI

От боли очереди к решению по ROI

Benchmark · waterfall · навигация по темам

Навигация по темам
Акция Смотреть тарифы