Ресурсы для сборки вашей команды

Mac для сборок под ваш CI-процесс

Две модели для задач от ежедневного CI одного приложения до сборки Unity.

Сначала определите, запускаются ли задачи каждый день или сосредоточены перед релизом, затем оцените требования к памяти, кэшу и параллельной сборке. VMFly предоставляет выделенный физический Mac mini на Apple Silicon, а не виртуальную машину: узел закреплён за одним клиентом, и его ресурсы не конкурируют с задачами других арендаторов.

  • От $20.1 в день
  • Чип Apple Silicon M4 / M4 Pro
  • Период оплаты день / неделя / месяц / квартал
Ежедневные сборки · постоянный узел

Замените общую очередь собственным runner команды

Для CI одного приложения, который запускается ежедневно, можно начать с месячной аренды Glide M4: Apple Silicon M4, 16 ГБ памяти, SSD на 256 ГБ за $100.7 в месяц. Направьте задачи macOS в GitHub Actions на собственный runner — и не придётся ждать завершения сборок других арендаторов на общей машине.

Сначала перенесите один воспроизводимый workflow

Выберите стабильную цепочку сборки и зафиксируйте коммит, версию Xcode, lock-файл зависимостей и способ подписи. Сначала выполните чистую сборку, затем включайте кэширование: иначе старый кэш может скрыть различия окружений.

  1. Установите и зарегистрируйте на узле self-hosted runner команды.
  2. Назначьте runner метку для конкретного проекта, например vmfly-iosи ограничьте список репозиториев, к которым у него есть доступ.
  3. Запустите старую цепочку и новый узел на одном коммите, затем сравните тесты, настройки архивирования и артефакты.

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

Выделенные ресурсы не означают неограниченный параллелизм

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

  • Начните с одной задачи и отслеживайте пиковое потребление памяти, свободное место на диске и рост кэша.
  • Назначьте архивированию и UI-тестам разные метки, чтобы они не записывали данные одновременно в один рабочий каталог.
  • Проверьте на реальном проекте, достаточно ли 16 ГБ памяти, прежде чем добавлять узел или выбирать другую модель.

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

Релизный пик · аренда по дням

Разведите архивирование и UI-тесты по разным узлам

Пиковая нагрузка при подготовке релиза часто приходится всего на несколько рабочих дней. Добавьте на этот срок Cruise M4 Pro за $61.5 в день: Apple Silicon M4 Pro, 64 ГБ памяти и SSD на 2 ТБ под UI-тесты или архивирование. Текущий узел продолжит выполнять ежедневные проверки — не придётся покупать оборудование ради краткосрочного пика.

Перед масштабированием разделите задачи

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

  • Для задач архивирования и тестирования зафиксируйте один и тот же коммит.
  • Задайте единые правила именования и загрузки артефактов, чтобы ветки не перезаписывали файлы друг друга.
  • Запишите шаги настройки окружения, чтобы временный узел можно было восстановить из конфигурационных файлов.

Сначала измерьте время выполнения критических этапов, затем увеличивайте параллелизм. Не рассчитывайте на ускорение без замеров.

Перед завершением релиза передайте всё необходимое

Укажите в релизном чек-листе условия завершения аренды временного узла: последняя проверка пройдена, артефакты загружены, диагностические журналы сохранены. Затем завершите период аренды. Остановка runner не отменяет дальнейшее начисление платы: проверьте статус подписки и дату окончания в консоли.

  • Выгрузите архивы, отчёты о тестировании и журналы с ошибками, которые нужно сохранить.
  • Удалите регистрацию временного runner на платформе хостинга кода.
  • Отзовите временные токены и сохраните резервную копию данных до окончания аренды.
Unity для iOS · экспорт и архивирование

Настройте единый процесс экспорта проекта в IPA

Экспортированный из Unity проект Xcode, установка зависимостей, подпись и архивирование IPA должны выполняться в одном воспроизводимом окружении с полной историей. 64 ГБ памяти и SSD на 2 ТБ в Cruise M4 Pro подходят для крупных проектов, импорта ресурсов и кэша сборок. Однако необходимый объём ресурсов и параллелизм нужно проверять на конкретном проекте.

  1. 01

    Зафиксируйте параметры экспорта

    Запишите версии редактора Unity, зависимости проекта и настройки экспорта для iOS. Генерируйте проект Xcode из фиксированного коммита, чтобы версии редактора на локальной машине и узле совпадали.

  2. 02

    Проверьте подпись и архив

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

  3. 03

    Разделите кэш и артефакты

    Кэш можно пересоздать, а релизные артефакты нужно хранить. Задайте отдельные каталоги и правила очистки для промежуточных файлов Unity, DerivedData и архивов, чтобы накопления не заполнили системный диск.

Интерактивные задачи · сначала тестовый период

Для отладки нужен рабочий стол, для экспериментов — воспроизводимое окружение

Узел подходит не только для сборок без участия пользователя. Войдите в консоль, откройте удалённый рабочий стол macOS в браузере и отлаживайте проект в Xcode. Или запускайте скрипты по SSH и проверяйте на Apple Silicon сценарии локального вывода моделей.

Для удалённой разработки сначала проверьте задержку

При частой работе с симулятором, проверке интерфейса и пошаговой отладке задержка сети заметнее, чем при фоновой сборке. Доступны дата-центры в Сингапуре, Японии (Токио), Южной Корее (Сеул) и Гонконге. Сначала протестируйте узел поближе к команде, а затем выберите площадку для постоянной работы.

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

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

Перед экспериментами с ИИ проверьте потребление памяти

Выбирайте конфигурацию с учётом файлов модели, точности вывода, длины контекста и числа одновременно работающих инструментов, а не только по названию модели. Начните с короткого периода аренды, настройте окружение и проверьте пример, а затем решите, подходит ли Glide M4 или нужен Cruise M4 Pro.

  • Убедитесь, что зависимости совместимы с Apple Silicon, и запишите версии и параметры запуска.
  • Следите за нагрузкой на память во время реальной работы: объём SSD не заменяет объём оперативной памяти.
  • Сохраняйте входные данные, параметры и результаты, чтобы повторить эксперимент после переноса на новый узел.

64 ГБ памяти не гарантируют запуск любой модели: совместимость и достаточный объём нужно проверять на реальных задачах.

Проверка конвейера · от подписи до распространения

Сохраняйте проверяемый результат на каждом этапе сборки

Ниже приведён фрагмент примера workflow для fastlane, а не результаты тестирования на узле. Команде нужно самостоятельно настроить доступ к репозиторию подписей, схему проекта, идентификатор приложения и учётные данные для распространения. Сначала проверьте каждый этап отдельно, а затем объедините их в автоматизированную задачу.

cruise-m4pro — fastlane
$ bundle exec fastlane match appstore --readonly
[match] Fetching signing certificates and profiles
[match] Installing signing assets into the build keychain
[match] Signing assets are ready

$ bundle exec fastlane gym --scheme "$SCHEME" --export_method app-store
[gym] Archiving the selected scheme
[gym] Exporting the archive
[gym] IPA export completed

$ bundle exec fastlane pilot upload --ipa "$IPA_PATH"
[pilot] Uploading the selected IPA
[pilot] Upload completed; processing continues on TestFlight

match: получайте только нужные учётные данные

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

gym: разделяйте архивирование и экспорт

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

pilot: завершение загрузки — ещё не завершение обработки

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

20 сборок в день · сравнение способов развёртывания

Сравните, кому принадлежат ресурсы и кто отвечает за эксплуатацию

Предположим, небольшая или средняя команда запускает 20 сборок в день. Это пример частоты задач, а не результат тестирования производительности и не основание определять нужное число машин. Сравните три варианта развёртывания, учитывая также длительность сборок, число одновременных запусков, долю попаданий в кэш и нагрузку перед релизом.

Варианты развёртывания одного конвейера iOS. Возможности и условия предоставления уточняйте у выбранной платформы.
Критерий Аренда физического узла VMFly Покупка Mac Общая виртуальная машина
Структура расходов Аренда на день, неделю, месяц или квартал. Glide M4 — $100.7 в месяц; дополнительные опции оплачиваются отдельно. Разовая покупка оборудования, плюс расходы на размещение, сеть, электричество и ежедневное обслуживание. Оплата по тарифу или за использование; также проверьте правила очереди и лимиты параллельных запусков.
Порядок предоставления После подтверждения оплаты назначается физическая машина; фактическую готовность проверяйте по актуальным данным в консоли. Нужно приобрести оборудование, дождаться доставки, подключить сеть и настроить удалённый доступ. Ресурсы распределяет платформа. Наличие очереди и сохранность окружения зависят от конкретного сервиса.
Выделение ресурсов Целый Mac mini закреплён за одним клиентом; это не виртуальная машина. Оборудование используется только командой, которая отвечает за обслуживание и управление системой на месте. Обычно ресурсы хоста распределяются между другими экземплярами; изоляцию и выделение ресурсов обеспечивает платформа.
Гибкость масштабирования Можно выбрать другую модель или добавить узел; перенос окружения и данных организует команда. Для масштабирования обычно нужно покупать и настраивать дополнительное оборудование, а существующие машины продолжают занимать бюджет. Доступные конфигурации и способы масштабирования зависят от каталога и правил распределения ресурсов платформы.

Проверьте варианты на одном и том же коммите

При 20 коротких сборках в день важнее может быть стабильный кэш, а при небольшом числе долгих UI-тестов — разделение задач по узлам. Не меняйте конфигурацию только из-за числа сборок. Проверьте на одном проекте длительность выполнения, потребление памяти и диска, а затем решите, оставить ли Glide M4 на постоянной основе или добавить Cruise M4 Pro на время релизов.

VMFly предоставляет выделенный физический узел, а команда управляет зависимостями проекта, правами runner, материалами для подписи и резервными копиями артефактов. Если нужна полностью управляемая оркестрация конвейера, сначала проверьте, не выполняют ли эту работу уже инструменты команды.

Выберите конфигурацию под свой сценарий

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