Self-hosted раннеры macOS для GitHub Actions
Self-hosted раннер macOS это Mac под вашим управлением. Он выполняет задачи GitHub Actions вместо общих облачных машин GitHub. Вы один раз регистрируете раннер и указываете его в workflow. После этого сборки идут на железе, которое остаётся прогретым между задачами.
Почему команды уходят с hosted раннеров macOS
GitHub берёт за раннеры macOS примерно от $0.062 до $0.102 за минуту. Это примерно в десять раз дороже Linux. Для редких сборок такая цена нормальна. Для команды, которая выпускает релизы каждый день, это дорого. Когда машина ваша, меняются три вещи:
- Стоимость перестаёт расти вместе с нагрузкой. Машина за фиксированную плату стоит одинаково при 1,000 и при 20,000 минут.
- Кэши сохраняются. Кэши DerivedData, CocoaPods, SwiftPM и npm лежат на локальном SSD. Инкрементальные сборки пропускают большую часть работы, которую свежий раннер повторяет.
- Окружение стабильно. Вы один раз фиксируете версию Xcode. Не нужно подстраиваться под обновления hosted образов по чужому графику.
Минусы, честно
У self-hosted есть недостатки. Задачи на одной машине идут по очереди, поэтому для больших параллельных матриц нужно больше машин. Если вы собираете чужие pull request, за безопасность раннера отвечаете вы. Поэтому GitHub советует self-hosted раннеры для приватных репозиториев. И кто-то должен следить за обновлениями macOS, установкой Xcode и работой службы раннера.
MacRun существует, чтобы снять с вас эту последнюю часть. Вы получаете выделенную машину и фиксированную цену. Подготовку, контроль и стирание машины мы берём на себя.
Как меняется workflow
Раннер регистрируется одной командой, один раз. После этого в пайплайне меняются две строки:
jobs: build: - runs-on: macos-latest + runs-on: [self-hosted, macOS, macrun-unit-01]
Всё остальное не меняется: ваши шаги, секреты и артефакты. Подробная инструкция есть в руководстве по настройке.
Собрать самому или арендовать
Если у вас уже есть свободный Mac и человек, который будет его обслуживать, self-hosted на своём Mac вполне разумен. Если не хочется покупать железо, ставить его в стойку и присматривать за службой раннера, подойдёт выделенная арендованная машина. Экономика та же, а эксплуатационной работы нет. Посчитайте свои цифры в калькуляторе стоимости.
Частые вопросы
Что такое self-hosted раннер macOS?
+
Это Mac под вашим управлением, который выполняет задачи GitHub Actions вместо общих hosted машин GitHub. Вы устанавливаете агент раннера Actions и регистрируете его в репозитории или организации. Затем указываете его в workflow через метку runs-on.
Self-hosted раннер macOS дешевле, чем hosted у GitHub?
+
Зависит от объёма. Hosted macOS у GitHub стоит примерно от $0.062 до $0.102 за минуту. Выделенный раннер за фиксированные $139 в месяц окупается примерно на 2,242 минутах в месяц по нижней ставке. Всё, что сверх этого, бесплатно.
Безопасны ли self-hosted раннеры для публичных репозиториев?
+
GitHub советует self-hosted раннеры для приватных репозиториев. Иначе pull request из форка может запустить чужой код на вашей машине. Если они всё же нужны в публичных репозиториях, требуйте одобрения для workflow из форков. И изолируйте раннер от всего, что вам дорого.
Нужно ли следить, чтобы служба раннера работала?
+
Да, раннер должен быть в сети, чтобы брать задачи. В MacRun за службой следит демон контроля. Если она падает, он перезапускает её примерно за 30 секунд, так что следить за ней вам не нужно.