GitHub поддерживает регистрацию Runner на трёх уровнях — для репозитория, организации или предприятия; выберите тот, которому действительно нужны задания (официальная инструкция GitHub). Если проекту необходима macOS или конкретный инструмент на Mac, а хост можно держать доступным, удалённый Mac подходит для собственного Runner. Начните с закрытого, контролируемого репозитория, настройте службу и проверьте рабочий процесс до передачи ей регулярных сборок.
Кому пригодится: независимым разработчикам iOS и macOS, которым нужна сборка на macOS.
Фрилансерам, настраивающим окружение для клиентских проектов.
Небольшим удалённым командам, готовым отвечать за доступность и безопасность Runner.
Этап 1. Проверьте, действительно ли нужен Mac Runner для GitHub Actions
Не всякому проекту требуется собственный Mac Runner. Сначала проверьте, что именно запускает рабочий процесс. Если задания используют только кроссплатформенные инструменты и не зависят от macOS, не добавляйте Mac только потому, что сборка уже настроена в GitHub Actions. Подходящая среда может быть доступна среди управляемых Runner, а обслуживание собственного хоста в этом случае создаст лишнюю работу.
Mac становится обоснованным выбором, если шагам процесса необходима macOS, проекту требуется программное обеспечение, работающее только на Mac, либо существующий процесс сборки нужно выполнять на контролируемом вами компьютере. В документации GitHub собственный Runner описан как машина, которую пользователь предоставляет и обслуживает самостоятельно. Ответственность за ОС, установленное ПО и доступность хоста при таком варианте лежит на владельце (обзор самостоятельно размещаемых Runner).
Различайте управляемый Runner и self-hosted runner не по названию задания, а по ответственности:
- На управляемом Runner инфраструктуру предоставляет GitHub. Пользователь всё равно отвечает за корректность рабочего процесса и его секреты.
- Собственный Runner исполняет задания на выбранной вами машине. Вам нужно поддерживать систему, инструменты проекта, сетевую доступность и службу.
- Удалённый Mac решает задачу доступа к macOS без необходимости держать рабочую станцию рядом с собой. Но удалённое размещение не отменяет обязанностей по настройке и защите Runner.
Перед настройкой запишите, какое конкретно ограничение требует Mac. Например: этап сборки должен выполняться в macOS, а не только публиковать уже собранный артефакт. Если такого требования нет, сначала оставьте задание на управляемой среде. Если оно есть, переходите к регистрации и заранее планируйте сопровождение.
Этап 2. Подготовьте область, хост и зависимости
Сначала определите область регистрации. Runner для одного репозитория проще ограничить одним проектом. Runner организации имеет смысл, если задания должны поступать из нескольких контролируемых репозиториев. Выбирайте область по реальному кругу пользователей и проектов, а не «на вырост»: чем шире область, тем важнее строго ограничить, кому разрешено запускать рабочие процессы.
Затем проверьте доступы. У пользователя, который добавляет Runner, должны быть права на настройки выбранного репозитория или организации. Проверьте, что команда действительно может администрировать целевую область, а не только отправлять изменения в код. Если рабочий процесс принадлежит заказчику, согласуйте место регистрации и владельца обслуживания до установки.
На удалённом Mac подготовьте отдельную рабочую папку, учётную запись и зависимости проекта. Установите только те инструменты, которые необходимы сборке. Запишите, кто обновляет их и как проверяется совместимость с проектом: незаметное обновление инструмента может изменить результат сборки так же, как изменение исходного кода.
Проверьте системные требования к приложению Runner и поддерживаемые варианты ОС и архитектуры в документации GitHub по требованиям к self-hosted runner. Не предполагайте, что любая версия macOS или любой набор установленных утилит автоматически совместимы. Сверяйте ограничения с документацией и целевым проектом до установки.
Полезно также заранее решить, где хранятся результаты работы и как восстанавливается окружение после сбоя. Runner — не резервная копия проекта. Не полагайтесь на локальную рабочую папку как на единственное место, где остаются важные изменения или артефакты.
Этап 3. Зарегистрируйте Runner по инструкциям GitHub
Не копируйте команды из старого руководства или другого проекта. Команды, параметры и регистрационный токен должны соответствовать текущей области и экрану настроек, в котором добавляется Runner.
Порядок действий:
- Откройте настройки репозитория или организации и найдите раздел Actions с настройками Runner.
- Выберите добавление self-hosted runner и укажите macOS.
- Выберите архитектуру, подходящую хосту и проекту.
- На странице регистрации прочитайте и выполните показанные GitHub команды для скачивания и настройки приложения.
- Убедитесь, что в процессе используется временный регистрационный токен, сформированный официальным интерфейсом GitHub.
- Завершите регистрацию и проверьте, что Runner появился в выбранной области.
Подробный порядок добавления описан в инструкции GitHub по регистрации Runner. Используйте команды, выданные для вашей настройки: не заменяйте их произвольным примером и не переносите токен между репозиториями.
Регистрационный токен — не настройка проекта. Не сохраняйте его в репозитории, не вставляйте в workflow-файл и не публикуйте в журналах или инструкциях. Если команда регистрации больше не работает, откройте настройки заново и получите актуальную инструкцию предусмотренным GitHub способом. Не пытайтесь «исправить» истёкший токен копированием из истории терминала.
Пока не переходите к регулярным сборкам. Успешная регистрация говорит лишь о том, что Runner добавлен в выбранную область. Она не подтверждает, что служба будет работать после закрытия терминала, перезагрузки хоста или обновления среды.
Этап 4. Настройте службу и проверьте постоянную работу
Runner, запущенный вручную в переднем плане, работает в рамках текущего процесса. Если завершить его или закрыть терминал, он перестанет получать задания. Для длительной работы настройте службу по официальной инструкции GitHub для macOS. Документация описывает конфигурирование приложения как службы и команды управления ею (настройка службы Runner для macOS).
В каталоге установленного Runner выполните установку службы и запуск в соответствии с текущими инструкциями GitHub. Для проверки предусмотрены команды обслуживания, включая svc.sh status. Их контекст и необходимые права сверяйте с документацией: запуск от неподходящей учётной записи может привести к тому, что служба будет установлена не для того пользователя или не получит ожидаемый доступ к проектным файлам.
Пример ожидаемой логики проверки:
./svc.sh status
Смотрите не только на сообщение команды, но и на состояние Runner в настройках GitHub. После установки убедитесь, что хост отображается как доступный, затем выполните пробное задание. Если статус локально выглядит штатным, а GitHub не назначает задания, проверьте регистрацию, область и сетевой доступ; официальные варианты диагностики собраны в руководстве GitHub по мониторингу и устранению неполадок.
Отдельно проверьте поведение после перезагрузки Mac. Убедитесь, что служба запустилась и Runner снова доступен в GitHub. Если проверка выполнялась только сразу после ручного запуска, утверждать, что Runner готов принимать задания постоянно, рано. Для команды это принципиальная разница: незаметно остановившийся процесс может оставить workflow в ожидании, хотя первоначальная регистрация была успешной.
Этап 5. Настройте метки и примите первую сборку
Рабочий процесс должен запросить именно тот Runner, который вы зарегистрировали. Для этого используются метки. GitHub назначает Runner метки, а задание можно направить на сочетание меток, соответствующее ОС, архитектуре и назначению хоста. Разбирайте их состав и правила в документации GitHub по меткам Runner.
Укажите в workflow метки, которые фактически отображаются у вашего Runner. Например, общая схема задания выглядит так:
jobs:
build:
runs-on: [self-hosted, macOS]
steps:
- uses: actions/checkout@v4
- name: Проверка доступности среды
run: sw_vers
Этот фрагмент показывает принцип выбора по меткам, а не универсальную конфигурацию для каждого проекта. Сверьте имена меток с интерфейсом GitHub и адаптируйте шаги под репозиторий. Не добавляйте метку архитектуры, если она отсутствует у Runner или не соответствует хосту. Если у задания несколько требований, они должны согласоваться с метками зарегистрированной машины.
Первую проверку проведите на контролируемом репозитории и безопасной задаче, которую можно повторить без побочных эффектов. Убедитесь, что:
- задание назначено именно нужному Runner, а не осталось в ожидании;
- в GitHub доступны журналы выполнения;
- команда проверки действительно выполняется в macOS;
- результат — например, ожидаемый артефакт или статус проверки — виден команде;
- после завершения задания Runner остаётся доступным для следующего запуска.
После этого добавьте инструменты, необходимые конкретному проекту, и проведите сквозную проверку его настоящего процесса сборки. Успешный тест одной задачи не доказывает совместимость всех workflow: разные задания могут требовать других зависимостей, доступа к секретам или настроек среды.
| Вариант | Когда выбирать | Что потребуется проверять | Основное ограничение |
|---|---|---|---|
| Управляемый Runner GitHub | Задаче подходит предоставляемая GitHub среда | Совместимость проекта с доступными ОС, инструментами и архитектурой | Меньше контроля над конкретной машиной и её состоянием |
| Собственный Mac Runner | Процессу необходима macOS или установленное на Mac ПО | Состояние хоста, службу, зависимости, метки и доступность | Обслуживание и безопасность остаются на стороне владельца |
| Удалённый Mac с собственным Runner | Нужен доступ к Mac вне рабочего места и управляемая среда для заданий | Удалённый доступ, службу после перезапуска и весь процесс сборки | Удалённость не снимает требований к сопровождению и защите |
Этап 6. Ограничьте доступ и поддерживайте окружение
Самостоятельно размещаемый Runner выполняет код workflow на хосте. Поэтому безопасность зависит не только от настроек Mac, но и от того, кто может менять рабочие процессы и запускать задания. GitHub отдельно предупреждает о рисках использования self-hosted runner в небезопасных сценариях, в частности при выполнении кода, которому не следует доверять на постоянной машине. Сверяйтесь с официальными рекомендациями GitHub по безопасному использованию Actions.
Не направляйте недоверенный внешний Pull Request на постоянный Runner с доступом к проектным файлам, секретам или другим рабочим материалам. Проверяйте правила доступа к репозиторию и workflow, а секреты предоставляйте только тем заданиям, которым они действительно необходимы. Для публичных репозиториев отдельно разберите, кто может инициировать выполнение и какой код попадёт на хост. Если границы доверия нельзя обеспечить, не используйте для таких задач постоянно доступную машину.
После настройки поддерживайте среду как часть проекта. Назначьте ответственного за обновление macOS и инструментов, проверку логов, исправление зависимостей и восстановление Runner после сбоя. Удаляйте ненужные рабочие данные и проверяйте, что следующий процесс не может случайно опереться на результаты предыдущего задания. Не трактуйте наличие отдельной рабочей папки как достаточную изоляцию: права доступа и состав доступных секретов важнее названия каталога.
Полезно вести короткую запись о том, какие версии инструментов нужны сборке, какие метки присвоены Runner и как проверить состояние службы. Это упростит восстановление после изменения окружения и поможет отличить ошибку workflow от проблемы хоста. Регулярно сверяйте актуальные инструкции GitHub для регистрации, службы и безопасности: именно они определяют поддерживаемый порядок настройки.
Для оценки расположения и условий удалённой инфраструктуры можно отдельно изучить информацию о центрах обработки данных OnceMac. При этом не делайте вывод о совместимости Runner только по географии: решающими остаются доступная среда macOS, права, удалённый доступ и проверка вашего workflow.
Частые вопросы
Как добавить Mac Runner в GitHub Actions?
Выберите репозиторий или организацию, где Runner будет получать задания, и откройте настройки Actions. Добавьте self-hosted runner, укажите macOS и подходящую архитектуру. Затем выполните команды, показанные GitHub для выбранной области. Завершите регистрацию и проверьте, что Runner появился в настройках. После этого настройте службу и проведите тестовое задание на контролируемом проекте.
Будет ли Runner принимать задания после закрытия терминала?
Передний запуск — это обычный работающий процесс. Если завершить его закрытием терминала, он перестанет принимать задания. Для постоянной работы настройте службу по руководству GitHub для macOS, запустите её и проверьте локальный статус и отображение в GitHub. Перезагрузка хоста — отдельный этап проверки: убедитесь, что после неё Runner снова доступен.
Как сделать так, чтобы Runner запускался вместе с Mac?
Настройте Runner как службу способом, который GitHub документирует для macOS. Выполните установку службы с нужными правами, запустите её и проверьте статус командой из официальной инструкции. Не полагайтесь на открытое окно терминала или самодельный сценарий автозапуска. После перезагрузки проверьте и службу на Mac, и состояние Runner в интерфейсе GitHub.
Допустимо ли запускать на нём Pull Request из публичного репозитория?
Не запускайте недоверенный код внешних Pull Request на постоянном Runner, если он может получить доступ к файлам, секретам или другим ресурсам хоста. Настройте границы доступа к workflow и проверьте, какие участники могут запускать задания. Если безопасно отделить такие задачи нельзя, оставьте их вне этого Runner и используйте среду, соответствующую требованиям доверия проекта.
Что выбрать после успешной проверки
Собственный Mac Runner оправдан, если проекту действительно нужна macOS и команда может обслуживать хост. Но у такого подхода есть цена в виде постоянных обязанностей: следить за доступностью службы, обновлять зависимости, контролировать права и не допускать попадания недоверенного кода в рабочую среду. Запуск Runner на личном ноутбуке добавляет ещё одну зависимость — он должен оставаться доступным, а сам компьютер придётся возить с собой или оставлять включённым.
Если сборка уже прошла проверку на удалённом Mac, сопоставьте этот сценарий с тем, как команда получает доступ к хосту, какие права доступны и на какой срок нужна среда. У вариантов OnceMac можно уточнить условия удалённого использования; принимать решение стоит после проверки конкретного workflow, а не по одному примеру из инструкции. Для кратких тестов и временной сборочной среды аренда Mac у OnceMac может избавить от необходимости покупать и постоянно перевозить отдельный Mac. Если же нагрузка долгосрочная, непрерывная и требует собственного физического оборудования, сначала сравните аренду с покупкой и локальным хостом.
Часто задаваемые вопросы
Где зарегистрировать собственный Mac Runner для проекта?
Сначала решите, кому нужны задания: одному репозиторию или нескольким проектам организации. В настройках GitHub откройте раздел Actions и добавьте Runner в выбранной области. Затем выберите macOS и архитектуру, подготовьте хост и выполняйте именно те команды регистрации, которые GitHub покажет для этой области. Так Runner получает корректную привязку и метки.
Runner продолжит работать после закрытия окна терминала?
Если запустить приложение Runner в переднем плане, закрытие терминала завершит этот процесс, и он перестанет принимать задания. Для непрерывной работы настройте Runner как службу по инструкции GitHub для macOS, запустите её и проверьте статус. После этого отдельно проверьте состояние Runner в GitHub и повторите проверку после перезагрузки хоста.
Как включить запуск Runner при старте Mac?
Используйте поддерживаемый GitHub сценарий установки службы для macOS, а не собственный скрипт запуска из окна терминала. В каталоге установленного Runner выполните команду установки службы с требуемыми правами, затем запустите службу и проверьте её статус. Точные действия сверяйте с текущей документацией: настройки и требования могут зависеть от версии приложения.
Можно ли запускать на таком Runner задания из внешних Pull Request?
Не направляйте недоверенные задания из внешних Pull Request на постоянный хост с доступом к файлам, учётным данным или другим проектам. Самостоятельно размещаемый Runner выполняет код рабочего процесса в своей среде, а очистка окружения после задания не должна считаться гарантией безопасности. Ограничьте, кто может запускать такие процессы, и отделите недоверенные проверки от постоянного Runner.
Подготовьте собственный узел для CI-сборок
Арендуйте в OnceMac отдельный физический узел с ресурсами, не разделяемыми с другими клиентами.
