2026 Jenkins и удаленные агенты SSH для MacКонтроллер Linux · Узлы сборки macOS · Сравнение с действиями GitHub

You already run Jenkins on Linux, но сборки iOS/macOS застревают между покупкой оборудования, постановкой в ​​очередь размещенных бегунов или присмотром за ноутбуками. Для команд, которые думаютVPS operations, это руководство открывает четвертый путь: оставить контроллер в Linux, подключитьвыделенные удаленные компьютеры Mac as SSH agents. Вы получаете семь обзорных мин, сравнительную таблицу сСамостоятельные бегуны GitHub Actions, a шестишаговая инструкция по адаптации(учетные данные, метки, параллелизм,xcodebuild, артефакты) и перекрестные ссылки на нашиrunner, SSH checklist, and Fastlane + CI articles.

01

Прежде чем подключить Дженкинса: семь предположений, которые сводят на нет обзоры «контроллер Linux + удаленный агент Mac»

Многие предприятия не испытывают недостатка в компьютерах Mac — им не хватаетпроверяемый, масштабируемый, удобный для откатаКонтракт: оставьте контроллер на знакомом Linux, переместите разветвление сборки macOS на выделенные облачные Mac. Семь пунктов ниже превращают фразу «мы верим в Дженкинса» в таблицу рисков, которую вы можете подписать.

  1. 01

    Относитесь к удаленному Mac как к «Linux, на котором работает xcodebuild»: ignoring TCC, Keychain и случайные зависимости графического пользовательского интерфейса приводят к взрыву подписи и подготовки при первом запуске.

  2. 02

    Повторное использование личной учетной записи macOS для CI:политики сна, запросы на обновление и сеансы рабочего стола нарушают настоящие автоматические потоки — создайте выделенного пользователя CI и согласуйте его сreproducible builds.

  3. 03

    Определение размера параллелизма только по ядрам ЦП:Скачки памяти Xcode и усиление записи NVMe обычно срабатывают раньше, чем процессор; без сегментовDerivedData, две работы могут зайти в тупик друг друга.

  4. 04

    Игнорирование различий в путях SSH от контроллера к агенту:бастионы, ротация ключей иStrictHostKeyCheckingполитики должны находиться в IaC, иначе в день ротации вы получите полностью красные очереди.

  5. 05

    Разрастание плагинов заменяет дизайн:тяжелый Groovy плюс специальная оболочка на агентах удлиняют MTTR — определите минимальный набор плагинов и явные версии набора инструментов.

  6. 06

    Оставляем артефакты только на агенте:без архивирования в хранилище объектов или репозитория артефактов страдают как диск, так и соответствие нормативным требованиям — хранение привязывается к политике конвейера.

  7. 07

    Никакого плана «первого человеческого окна»:при первоначальной установке материалов для подписи может потребоваться однократное подтверждение VNC или рабочего стола перед возвратом в автономный режим — см.Контрольный список SSH и VNC.

Общая основная причина заключается в том, что «удаленный Mac» рассматривается как необработанные вычисления, а не какХост цепочки инструментов Apple с сохранением состояния. Команды платформы должны поддерживать отпечатки изображений, версии цепочки инструментов, границы связки ключей и водяные знаки очистки так же, как и реплики базы данных. Сопряжение спулы корпоративных сборок: когда несколько приложений используют один хост, метки Jenkins должны быть тоньше, чем «любой Mac», иначе семантика очереди не сможет выразить изоляцию.

В отличие от GitHub Actions, настоящая разница заключается не в том, «может ли он скомпилироваться», а в том, «может ли он скомпилироваться».источники событий и границы учетных данных: Дженкинс блестяще справляется с оркестровкой между репозиториями и задачами в стиле cron; Actions отлично подходит для рабочих процессов, ориентированных на PR. Если вы уже стандартизировали Job DSL и одобрения, добавление macOS через SSH зачастую менее разрушительно, чем запуск второй религии CI, но если вы руководствуетесь сквозными связями с общественностью, самостоятельным менеджерам может потребоваться меньше клея. Прочтитеrunner guideкэшируйте разделы перед регистрацией узлов; большинство контрактов каталогов переводятся напрямую.

Следующая таблица фиксирует сравнение, поэтому вы можете выбрать плоскость управления, не пересматривая логотипы каждый квартал.

02

Агенты Jenkins SSH и автономные исполнители GitHub Actions: события, учетные данные и загрузка операций

Серебряной пули не существует — вы выбираетементальная модель оркестровки and a credential boundary, а не логотип. Впишите в обзор три соглашения об уровне обслуживания: задержка в очереди, объяснимые сбои и стоимость ротации ключей.

DimensionДженкинс + агент SSH (macOS)Самостоятельный раннер GitHub Actions
Event modelОбщие вебхуки, cron, параметризованные сборки; подключаемый к хостам GitТесно связан с событиями GitHub (PR, push, релиз); более высокая стоимость миграции в другое место
CredentialsКонтроллер централизованно хранит ключи и роли SSH — укрепите плоскость контроллера.Токены исполнителя и области организации/репозитория относительно стандартизированы.
Параллелизм и очередиМетки + емкость узла + плагины регулирования — гибко, но сложно настраиватьМатрицы и параллелизм живут в YAML с более плавной кривой обучения.
ObservabilityАгрегация журналов сборки является зрелой; метрики/оповещения создаются своими рукамиПользовательский интерфейс и API платформы унифицированы; глубокая настройка часто требует третьих сторон
Best fitЛинии нескольких продуктов, локальные хранилища артефактов, смешанные хосты Git, тяжелые утвержденияGitHub-ориентированные инженерные организации с доставкой на основе PR

Аренда Mac «как VPS» в терминах Jenkins означает покупкурегистрируемый профиль узла: фиксированный SSH, предсказуемые уровни дисков и возможность отмечать версии цепочки инструментов в метаданных узла.

Если Дженкинс выиграет ваш обзор, побалуйте себяnode propertiesв качестве первого класса: путь Xcode, версия Swift, Ruby/Bundler, если задействованы CocoaPods, а также разрешены ли задания графического интерфейса — все это должно быть подтверждено в выходных данных задания работоспособности. Сопряжение сснимки против долгоживущих узлов: долгоживущие агенты полагаются на поэтапную очистку; Базовые значения моментальных снимков основаны на повторно нагретых изображениях и дымовых тестах с откатом.

Если вам необходимо эксплуатировать и бегунки, и Дженкинсы в одном автопарке, унифицируйтеГруппа производных данныхконтракты: отдельные пользователи Unix или отдельные корни вместо «надеюсь, что смещенные графики позволят избежать коллизий».

03

Шесть шагов, чтобы зарегистрировать удаленный Mac в качестве SSH-агента Jenkins и получить первую «зеленую» сборку

Порядок имеет значение: на первом месте идентичность и каталоги, на втором — зонды инструментальной цепочки, на последнем — параллелизм. Согласовать сreproducible buildsтаким образом, Дженкинс не только доказывает, что «SSH работает», хотя подпись остается нестабильной.

  1. 01

    Создайте выделенного пользователя и рабочий root: e.g. /Users/ci/jenkins; forbid sharing ~/Desktopс людьми; контроллер использует только аутентификацию на основе ключей.

  2. 02

    Создайте узел Дженкинса: launch via SSH, установите хост, учетные данные, удаленный корень и путь JVM для стороны macOS.

  3. 03

    Label for intent: at least ios, xcode-16, heavy-pod— отделять установки с тяжелыми зависимостями от заданий только для компиляции.

  4. 04

    Сначала запустите задание работоспособности: print xcode-select -p, swift --versionснимки диска и памяти; сохраните журнал в качестве доказательства приемки.

  5. 05

    Передайте DerivedData явным образом в конвейеры: match Управление SwiftPM/Pods— бакет на репо, избегать дефолта~/Library/Developer/Xcode/DerivedData sharing.

  6. 06

    Определите таймауты, архивирование и очистку:загрузка журналов, сохранение в случае сбоя и правила планирования остановки, когда диск пересекает водяной знак.

groovy · Декларативный набросок конвейера
pipeline {
  agent { label 'ios && xcode-16' }
  options { timestamps(); timeout(time: 45, unit: 'MINUTES') }
  environment { DERIVED_DATA = "${WORKSPACE}/DerivedData" }
  stages {
    stage('Probe') { steps { sh 'xcode-select -p; xcodebuild -version; df -h' } }
    stage('Build') {
      steps {
        sh 'xcodebuild -scheme "App" -configuration Release -destination "generic/platform=iOS" -derivedDataPath "$DERIVED_DATA" build'
      }
    }
  }
  post { always { archiveArtifacts artifacts: '**/build.log', allowEmptyArchive: true } }
}
info

Tip:если трубопроводы еще и отгружают в магазины, читайтеFastlane + CIи согласовать пользователей сборки, разделы связки ключей и ключи API App Store Connect с доменами учетных данных Jenkins.

В дни обновления контроллера выполните один и тот же коммит до и после обновлений и сравните выходные данные отпечатков пальцев и дистрибутивы во время сборки. Противrunner caching: Очистка рабочего пространства Jenkins, которая слишком агрессивна и заполнена.pod installкаждый пробег; слишком консервативные очистки заполняют диски — определяют уровни хранения для платформы и продукта.

Если поставщики предоставляют нестандартные порты SSH и пользователей без полномочий root, храните метаданные подключения в описаниях учетных данных, а не разбрасывайте их по заданиям. Сопряжение сSSH checklist for known_hostspolicy вместо глобального отключения проверки ключей хоста.

04

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

Классическая ошибка — определять параллелизм исходя из того, «сколькоxcodebuildпроцессы подходят». В действительности,pod install/ СЗМ разрешает и компилирует пики на разных фазах — используйте дроссели и метки для моделированияmutex resources. Pair with Управление SwiftPM/Podsчтобы изолировать сложные задачи по решению задач от быстрых «зеленых» сборок.

Тесты пользовательского интерфейса, насыщенные симуляторами, меняют историю параллелизма по сравнению с заданиями, состоящими только из компиляции; следоватьXCTest / Simulatorруководство по сегментированию и изолировать эти задания с помощью собственных меток или пулов дочерних узлов.

warning

Warning:не продолжайте планирование, когда диск находится ниже водяной отметки безопасности — сначала приостановите планирование и очистите его; в противном случае Xcode и git могут наполовину записать состояние, которое стоит больше, чем короткая очередь.

Мультирегиональные автопарки должны кодироватьregionв именах и метках узлов, а также помечайте пути выхода артефактов, чтобы избежать случайных массовых копий между регионами, ошибочно принятых за сбои сборки. Сrent vs buy TCOзаблаговременно включать задержку и выходную полосу пропускания в модель затрат.

05

Справочные номера, которые вы можете вставить в обзор проекта (с примечанием к GDPR).

Настройте пороговые значения в соответствии с вашими размерами параллелизма и репо; эти якоря объединяют команды безопасности и платформы. Для организаций, ориентированных на ЕС, logкакие машины касались каких подписывающих удостоверенийдля поддержки вопросов аудита DSGVO — удаленные узлы не должны быть анонимными домашними животными.

  • Disk watermark: keep ≥20%свободное место на системных томах; под ним приостанавливайте планирование перед удалением и регистрируйте удаленные пути для аудита.
  • Concurrency probe:базовый пиковый объем ОЗУ для одного задания, затем увеличьте параллелизм во время просмотра P95;Apple SiliconПиковые значения компиляции/связывания часто затмевают средние значения.
  • Контрольный список приемки узла: record xcodebuild -version, swift --version, Ruby/Bundler, когда CocoaPods используется, и модель диска; повторно запускайте канареечные задания после любых изменений.

Офисные ноутбуки и одноразовые Mac mini вызывают спящий режим, дрожание сети и дрейф цепочки инструментов; чистый Linux не может запускать официальный стек iOS от Apple. Сохранение Jenkins в Linux при переносе сборок macOS навыделенный, всегда включенный, доступный по SSHnodes превращает фразу «нам где-то нужен Mac» в операционный контракт. По сравнению со специальным оборудованием или нестабильными виртуализированными хостами,Аренда облака Mac Mini от NodeMiniпары фиксированного SSH, чистых дисковых уровней и повторяемых профилей — лучше для CI платформенного уровня. Сравните уровни вrental rates and onboard via the help center.

Привяжите этот модуль Runbook к внутренним «уровням изменений цепочки инструментов»: исправления Xcode, незначительные и крупные обновления должны иметь разные утверждения, канареечную область действия и правила аннулирования кэша.

FAQ

FAQ

Не автоматически. Jenkins выигрывает благодаря подключаемым конвейерам и локальной интеграции; Actions побеждает на PR-мероприятиях. Если у вас уже есть Job DSL, агенты SSH часто работают более гладко; если вы ориентированы на GitHub, бегунам может потребоваться меньше клея. Сравните уровни оборудования вrental rates.

Да — отделите дом и связку ключей от личных учетных записей, чтобы избежать спящего режима, подсказок графического интерфейса и дрейфа разрешений; соответствие контрольному списку SSH и статьям о воспроизводимых сборках. Более подробная информация содержится вhelp center.

Базовое пиковое усиление оперативной памяти и записи NVMe для одного задания, а затем масштабирование параллельной обработки при просмотре P95; Установка ведра DerivedData и тяжелого модуля дроссельной заслонки. Также прочтитеself-hosted runnerстатья о шаблонах кэша, соответствующих меткам Jenkins.