GitLab macOS Runner офлайн после перезапуска: в проекте есть ожидающие задания, но Mac их не забирает.
Быстрое решение: войдите в macOS под учётной записью Runner, проверьте пользовательский LaunchAgent и затем подтвердите связь Runner с GitLab.

Эта инструкция подойдёт цифровым кочевникам и удалённым разработчикам, которым нужно восстановить сборку проекта после перезапуска Mac.
Она также поможет iOS-разработчикам проверить зависимость от пользовательского сеанса, симулятора и окружения подписи.
Небольшие команды смогут по результатам решить, готовы ли они поддерживать собственный Runner.

Сначала определите, где прервалась цепочка

В GitLab CI/CD слово «офлайн» не всегда указывает на одну и ту же неисправность. Задание может ждать без подходящего Runner, проект может не иметь права использовать зарегистрированный Runner, а сам Runner может быть недоступен с хоста. Поэтому сначала разделите проблему на наблюдаемые состояния, а не переустанавливайте службу наугад.

Проверьте в интерфейсе GitLab страницу Runner и сопоставьте её с заданием в очереди:

  • Runner отмечен как офлайн. Начните с Mac: проверьте вход пользователя, работу LaunchAgent и сетевое подключение к GitLab.
  • Runner отображается онлайн, но задание ожидает. Сверьте теги задания и Runner, его область регистрации и доступность для проекта. GitLab направляет задание Runner с подходящими тегами; проверьте это по документации о тегах и выборе Runner.
  • Runner получил задание, но оно завершилось ошибкой. Переходите к журналу задания и локальному окружению. На этом этапе проблема уже не обязательно связана с запуском службы.
  • В интерфейсе нет ожидаемого Runner или данные не совпадают с локальной проверкой. Зафиксируйте идентификатор Runner и проверьте его состояние доступным способом, включая описание полей статуса в API Runner.

Эта развилка важна в поездке. Если в кафе нестабильна сеть, Runner может оказаться недоступен из-за подключения. Если проект не назначает ему задание, повторный запуск Mac ничего не исправит. А если Runner взял задание, но упал во время сборки, проверять нужно уже инструменты и права пользователя.

Проверьте, вошёл ли нужный пользователь в macOS

Установка GitLab Runner для macOS использует пользовательский LaunchAgent. Это не то же самое, что системный LaunchDaemon: LaunchAgent связан с сеансом конкретного пользователя, а не является автоматически независимой системной службой для работы без входа. Подробности о режиме установки и пользовательском сеансе приведены в инструкции GitLab Runner для macOS.

Проверьте на удалённом Mac именно ту учётную запись, под которой был установлен Runner. Если после перезапуска вы вошли под другой учётной записью или пользовательский сеанс не был открыт, агент может не работать ожидаемым образом.

Действуйте последовательно:

  • Установите, какая учётная запись запускает Runner. Сверьте её с учётной записью, вошедшей в macOS.
  • Проверьте, есть ли пользовательский сеанс после перезапуска. Одного доступного SSH-подключения недостаточно, чтобы доказать, что вход выполнен именно в нужный графический сеанс.
  • Откройте ~/Library/LaunchAgents/ и проверьте наличие файла агента, связанного с GitLab Runner. Не переносите его в системную папку LaunchDaemons: это изменит режим установки, а не просто «починит автозапуск».
  • В терминале под нужным пользователем выполните gitlab-runner status. Сравните ответ с тем, что показывает GitLab.
  • Выполните gitlab-runner verify, чтобы проверить зарегистрированный Runner и его связь с GitLab. Команды и их назначение описаны в справке по командам GitLab Runner.

Если пользователь не вошёл в систему, сначала выполните обычный вход и снова проверьте статус. Если после входа агент запускается, причина связана с восстановлением пользовательского сеанса. Если вход выполнен, но служба всё ещё не работает, проверьте установку агента, локальные журналы и результат команды проверки.

Не считайте отключение SSH причиной выхода из macOS. Завершение SSH-сеанса, выход пользователя из графической сессии и перезапуск хоста — разные события. Проверьте каждое отдельно на используемом режиме запуска.

Если служба работает, но Runner остаётся недоступен

Работающий процесс на Mac ещё не доказывает, что Runner подключён к GitLab. Сопоставьте три независимых наблюдения: локальный статус службы, статус Runner в GitLab и результат попытки связаться с сервером через gitlab-runner verify. Если данные расходятся, не начинайте с переустановки: сначала выясните, доходит ли Runner до GitLab и соответствует ли зарегистрированная конфигурация текущему проекту.

Проверьте также:

  • Регистрацию и область доступа. Убедитесь, что Runner зарегистрирован там, где ожидает проект, и что его не отключили для нужной области. Порядок настройки регистрации и выполнения заданий описан в документации по конфигурации GitLab Runner.
  • Теги. Теги Runner должны соответствовать тегам задания. Если Runner доступен, но не подходит заданию, GitLab не назначит ему эту работу.
  • Сеть удалённого Mac. Убедитесь, что соединение с GitLab доступно из текущей сети. После смены Wi-Fi, VPN или сетевых ограничений повторите проверку связи. Не делайте вывод о сбое сервиса только по тому, что веб-интерфейс GitLab открывается на другом устройстве.
  • Учётные данные и настройки. Если соединение не подтверждается, сверьте используемую конфигурацию с установленным Runner. Не публикуйте токены регистрации и секреты в логе, снимке экрана или сообщении поддержки.

Для проверки статуса используйте одновременно локальный вывод и страницу Runner в GitLab. Команда может подтвердить работу процесса или соединение, но не подтверждает, что конкретное задание подходит этому Runner. И наоборот, статус в интерфейсе не показывает, способен ли Mac успешно открыть проект и выполнить Xcode.

Определите, почему повторный вход возвращает Runner

Для диагностики воспроизведите фактический порядок событий на хосте: перезапуск, вход пользователя, проверка службы и появление Runner в GitLab. После этого отдельно проверяйте выход из macOS и отключение SSH. Не выводите поведение одного сценария из другого.

Если после входа Runner появляется в GitLab, а после выхода из пользователя становится недоступным, результаты указывают на зависимость от сеанса. Такой результат согласуется с пользовательским режимом LaunchAgent, но его нужно подтвердить на вашей установке. Не превращайте наблюдение в универсальное правило для всех хостов и способов размещения Runner.

Если после выхода из SSH Runner продолжает работать, это показывает только то, что завершение оболочки не остановило его в данной конфигурации. Это не доказывает, что Runner переживёт выход пользователя или перезапуск Mac. Запишите состояние до и после каждого действия и проверяйте его локально и в GitLab.

Для дальнейшей диагностики выполните такую последовательность:

  1. Зафиксируйте, вошёл ли пользователь Runner в macOS.
  2. Проверьте состояние LaunchAgent и результат gitlab-runner status.
  3. Проверьте связь командой gitlab-runner verify.
  4. Сопоставьте локальные результаты со статусом Runner в GitLab.
  5. Повторите проверку после каждого отдельного события: отключения SSH, выхода пользователя и перезапуска.

Так вы получите проверяемое объяснение: «после входа агент запустился», «после выхода пользователя стал недоступен» или «локально активен, но соединения с GitLab нет». Формулировка «после перезапуска сломалось» сама по себе недостаточна, чтобы выбрать исправление.

Оцените риск автоматического входа до включения

Автоматический вход может помочь вернуть пользовательский сеанс после перезапуска. В документации GitLab этот вариант рассматривается в контексте доступности Runner, которому требуется пользовательский сеанс. Это описание не означает, что автоматический вход подходит любому удалённому Mac. Apple отдельно описывает настройки и последствия автоматического входа в справке по автоматическому входу в macOS.

Перед изменением настройки ответьте на вопросы:

  • Может ли посторонний получить физический доступ к Mac или к помещению, где он находится?
  • Какие проектные ключи, сертификаты и другие секреты доступны вошедшему пользователю?
  • Контролируется ли доступ к удалённой машине и кто может подключиться к ней?
  • Есть ли запасной путь сборки, если Runner не вернётся после перезапуска?

Преимущество автоматического входа: пользовательский сеанс может восстановиться без ручного подключения, что помогает Runner снова запуститься.

Недостатки: хост остаётся в пользовательском сеансе; физический доступ получает другое значение; последствия для учётной записи и доступных секретов нужно оценивать отдельно. Нельзя считать этот режим безопасным только потому, что он решает проблему автозапуска.

Выбирайте его только после оценки защиты хоста и проекта. Если такую границу доступа принять нельзя, лучше планировать ручное восстановление, другой режим сборки или запасной путь, а не ослаблять защиту ради удобства.

Разделите доступность Runner и успешную сборку Xcode

Даже когда GitLab показывает Runner онлайн, задание может завершиться ошибкой уже на Mac. Для диагностики отделите получение задания от выполнения команд и от успешной сборки приложения. Проверяйте журнал конкретного задания: на каком именно действии оно остановилось, каким пользователем выполнялось и к каким инструментам имело доступ.

Для проекта с iOS-сборкой проверьте активный каталог разработчика:

xcode-select -p

Команда показывает выбранный каталог инструментов разработчика. Сопоставьте его с установленным Xcode и требованиями проекта. Документация Apple объясняет, как установить инструменты командной строки Xcode и как управлять дополнительными компонентами Xcode.

Затем проверьте условия выполнения задания:

  • доступен ли проект рабочей учётной записи Runner;
  • совпадают ли переменные и секреты с окружением сборки;
  • выбраны ли необходимые инструменты и компоненты Xcode;
  • может ли задание обратиться к симулятору или другим необходимым ресурсам;
  • нет ли в журнале ошибки подписи, зависимостей или доступа к файлам.

Если Runner онлайн, но задание не стартует, вернитесь к тегам, разрешениям и регистрации. Если задание началось, но команда Xcode завершилась ошибкой, исследуйте журнал и окружение. Это разные места отказа, и исправление LaunchAgent не устранит ошибку выбранного каталога разработчика.

Выберите рабочую схему по требованиям к восстановлению

Используйте сравнение как инструмент решения. Оно не заменяет проверку на вашем Mac: конкретный результат зависит от установленного режима Runner и требований проекта.

Вариант Когда подходит Ограничение, которое нужно принять Решение
LaunchAgent с ручным входом Вы можете войти на Mac после перезапуска и подтвердить работу Runner До входа пользовательский агент может быть недоступен для ожидаемой работы Оставляйте, если ручное восстановление приемлемо
LaunchAgent и автоматический вход Нужна попытка автоматического возврата пользовательского сеанса Меняется граница физического доступа и защиты учётной записи Используйте только после оценки риска для хоста и секретов
Запасной путь сборки Проект не должен зависеть от доступности одного удалённого Mac Нужно отдельно поддерживать и проверять альтернативный процесс Выбирайте, если недопустимо ждать ручного восстановления

Проверяйте решение на контрольном проекте, а не только по значку Runner. Успешный результат — это когда Runner доступен для назначения, принимает подходящее задание, выполняет проектные команды и завершает Xcode-сборку без ошибки. Зафиксируйте, какой пользователь вошёл, как восстановился LaunchAgent и что показал журнал. Так можно решить, достаточна ли текущая схема для поездки или нужна резервная.

Проведите проверку восстановления до следующего выезда

Запланируйте проверку в момент, когда остановка сборки не сорвёт выпуск. Важно пройти весь цикл, а не ограничиваться перезагрузкой и снимком экрана со статусом.

  1. Убедитесь, что проект доступен, Runner зарегистрирован и заданию назначены корректные теги.
  2. Зафиксируйте исходный статус службы и Runner в GitLab.
  3. Перезапустите Mac в согласованное окно и проверьте, какой пользовательский сеанс восстановился.
  4. Выполните локальные проверки gitlab-runner status и gitlab-runner verify.
  5. Убедитесь, что GitLab снова видит Runner и может назначить ему подходящее задание.
  6. Запустите реальную сборку проекта и изучите журнал до успешного завершения Xcode.
  7. Повторите сценарии отключения SSH и выхода пользователя по отдельности, если они важны для вашей работы.

Результат определяет следующий шаг. Если после входа Runner возвращается, а сборка проходит, оставляйте текущую схему и документируйте действия восстановления. Если нужен автоматический возврат, но его риск для хоста неприемлем, настройте запасной путь. Если Runner постоянно требует ручной работы, пересмотрите ответственность за сопровождение, а не маскируйте проблему одним изменением входа.

Частые вопросы о Runner после перезапуска

Почему Runner не появляется в GitLab после перезапуска Mac?

Проверьте вход пользователя, от имени которого установлен Runner, затем состояние LaunchAgent и связь с GitLab. Если локальная служба работает, а заданий нет, проверьте разрешения проекта и совпадение тегов. Отсутствие задания может означать проблему назначения, а не остановку Runner.

Как проверить, запущен ли GitLab Runner на Mac?

Выполните gitlab-runner status, затем gitlab-runner verify. Сопоставьте локальный результат со страницей Runner и журналом задания. Работающая служба не гарантирует, что Runner подключён к GitLab или что Xcode-сборка завершится успешно.

Будет ли Runner работать после выхода из macOS?

Не приравнивайте выход из SSH к выходу пользователя из графического сеанса. LaunchAgent связан с пользовательским сеансом, поэтому отдельно проверьте поведение после выхода, перезапуска и повторного входа. Учитывайте режим, в котором установлен ваш Runner.

Поможет ли автоматический вход восстановить Runner?

Он может восстановить сеанс, необходимый LaunchAgent, но одновременно меняет границу физического доступа к хосту. Перед включением проверьте защиту Mac, учётной записи и проектных секретов. Если риск неприемлем, предусмотрите ручное восстановление или альтернативный путь сборки.

Если ваш текущий GitLab CI/CD зависит от удалённого Mac, его слабое место — необходимость проверять вход пользователя, состояние агента, сеть и окружение Xcode после сбоя; автоматический вход добавляет отдельный риск, а отсутствие резервного пути оставляет проект зависимым от одного хоста. Если после проверки вам действительно нужен постоянно доступный macOS для сборок, изучите, как устроены удалённые Mac в MACCOME и оформление доступа к Mac. Сначала сопоставьте условия доступа с вашей процедурой восстановления: аренда полезна, когда требуется временная удалённая среда, но не отменяет проверку Runner, секретов и успешной сборки.