Руководство

Hosted раннеры macOS у GitHub или выделенный Mac: честный расчёт

Поминутная ставка это только начало сравнения. Hosted раннеры macOS берут плату и за работу, которую прогретая машина не повторяла бы. И они отнимают время инженеров в очередях. На этой странице оба варианта сравниваются на трёх реалистичных уровнях нагрузки, и все допущения названы.

Допущения

  • Hosted macOS оплачивается по $0.062 за минуту, это ставка стандартного раннера. Каждая задача округляется вверх.
  • Холодный hosted раннер тратит около 3 минут на задачу, чтобы восстановить зависимости и пересобрать то, что сохранил бы прогретый кэш. Это оплачиваемое время.
  • Выделенный M6 mini за фиксированные $139 в месяц, прогретые кэши, без восстановления в каждой задаче.
  • Ожидание GitHub не тарифицирует, но оно реально. В часы пик очередь за раннером macOS часто занимает несколько минут.

Три команды, один месяц

                       light        steady       heavy
  jobs per month         120          400          900
  minutes per job          8           10           12
  billed on hosted     1,320 min    5,200 min   13,500 min
    incl. cache restore  (360)      (1,200)      (2,700)
  hosted cost           $82         $322         $837
  dedicated M6          $139        $139         $139
  monthly difference   -$37        +$203        +$718

Команде с лёгкой нагрузкой стоит остаться на hosted раннерах. Команда со стабильной нагрузкой экономит пару сотен долларов в месяц и получает более быстрые сборки. Команда с высокой нагрузкой каждый месяц платит за машину в несколько раз больше её цены. И получает при этом более медленную.

Откуда берутся скрытые минуты

Каждая hosted задача стартует с чистого образа. Она заново скачивает пакеты SwiftPM, CocoaPods и части среды выполнения симулятора, а потом пересобирает DerivedData с нуля. В настоящем проекте это несколько оплачиваемых минут на задачу ещё до компиляции вашего кода. На выделенной машине эти артефакты сохраняются. Вторая сборка за день начинается там, где закончилась первая.

Скорость, а не только деньги

Тот же прогретый кэш, который убирает оплачиваемые минуты, убирает и минуты реального времени. Команды переносят 12-минутную hosted сборку на выделенный Mac mini с прогретым кэшем. Часто она заканчивается за время от 4 до 6 минут. Очереди перед ней нет. Это разница между pull request, проверенным до обеда, и после.

Чего выделенный Mac не решает

  • Параллельные матрицы. Одна машина выполняет одну задачу за раз. Разделите матрицу или добавьте машины.
  • Публичные репозитории. Не запускайте чужой код из pull request на машине, которая вам дорога. Оставьте такие задачи на hosted раннерах.
  • Кто-то должен её обслуживать. Обновления, служба раннера, стирание. Именно это MacRun делает за фиксированную цену. При простой аренде это ваша работа.

Посчитайте свои цифры в калькуляторе. Полная таблица ставок есть на странице о ценах GitHub Actions.

Частые вопросы

Выделенный Mac всегда дешевле hosted раннеров macOS у GitHub?

+

Нет. Ниже примерно 2,242 минут macOS в месяц поминутная оплата обходится дешевле машины за фиксированные $139. Выше этого выделенный Mac дешевле, и разница растёт с нагрузкой.

Почему hosted раннеры списывают больше минут, чем длится моя сборка?

+

Каждая задача стартует с чистого образа. До компиляции она тратит оплачиваемые минуты на восстановление зависимостей и пересборку кэшей. Прогретая выделенная машина пропускает эту работу во всех задачах после первой.

Насколько выделенный Mac mini быстрее hosted раннера?

+

С прогретым кэшем и без очереди 12-минутная hosted сборка обычно заканчивается за время от 4 до 6 минут. Точный выигрыш зависит от того, какую долю сборки занимают зависимости и кэши.

Можно ли использовать оба варианта сразу?

+

Да, многие команды так и делают. Сборку основной ветки и большинство pull request запускайте на выделенном Mac. Широкие матрицы устройств и задачи публичных репозиториев оставьте на hosted раннерах GitHub.

Похожие руководства