Для реальных инженерных процессов

Подключите выделенный облачный Mac к сборке, тестированию и рабочей разработке

HexVM выделяет для каждого заказа отдельный физический узел Mac mini, а не виртуальную машину. Команда может сохранить текущие репозитории, скрипты и правила релиза, перенеся в облако только этапы, которым нужны macOS и Apple Silicon.

pipeline / macos-arm64 Выполняется
01

Репозиторий кода

Триггер по коммиту
02

Выделенный узел

Проверка окружения
03

Xcode

Сборка и тестирование
04

Артефакты

Архивирование и загрузка
Результат выполнения Воспроизводимое окружение, отслеживаемые задачи
Фильтр по рабочей нагрузке

Сначала определите, какие задачи перенести на облачный Mac

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

Подходит для непрерывной интеграции

Превратите macOS Runner в управляемое фиксированное окружение выполнения

После коммита платформа репозитория назначает задачу self-hosted runner, который на выделенном узле восстанавливает зависимости, запускает тесты, архивирует сборку и загружает артефакты. Команда самостоятельно задаёт правила запуска, стратегию параллелизма и права доступа к ключам.

Посмотреть процесс iOS CI/CD
Входные данныеРепозиторий, скрипты сборки, материалы сертификатов
ВыполнениеТестирование и архивирование xcodebuild
ПриёмкаЛоги, результаты тестов, устанавливаемые артефакты
iOS CI/CD

Пять этапов: от коммита до загрузки артефактов

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

  1. 01

    Коммит кода

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

    Приёмка: правило запуска воспроизводимо
  2. 02

    Планирование Runner

    Задайте self-hosted runner понятные метки, например архитектуру чипа, основную версию Xcode и назначение. Параллелизм на одном узле следует оценивать по пиковому потреблению памяти и объёму записи на диск.

    Приёмка: задача попадает только на целевой узел
  3. 03

    Сборка и тестирование

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

    Приёмка: причина сбоя определяется
  4. 04

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

    Временно разблокируйте необходимую связку ключей для задачи релиза и сразу закройте доступ после завершения. Храните сертификаты и профили provisioning отдельно для каждого проекта и окружения; не оставляйте их в открытом виде в обычном каталоге сборки.

    Приёмка: права ограничены необходимым минимумом
  5. 05

    Загрузка артефактов

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

    Приёмка: артефакты отслеживаются
Рекомендуется разделить тестирование и релиз по уровням доступа.

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

Сборка приложений macOS

Пусть сборки разных веток используют общие правила, а не загрязнённое окружение

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

Изоляция веток

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

  • Зафиксировать права релиза для основной ветки
  • Задать срок очистки временных веток
  • Сохранять хэш коммита и параметры сборки

Кэш зависимостей

Ключ кэша должен как минимум включать хэш lock-файла зависимостей, основную версию toolchain и архитектуру. При аномалии попадания в кэш должна быть доступна сборка без кэша одним действием.

  • Разделять кэш загрузок и артефакты сборки
  • Задать порог объёма и порядок очистки
  • Регулярно запускать эталонную задачу без кэша

Артефакты релиза

Храните отдельно результаты тестов, материалы подготовки к нотариальному заверению, установочные пакеты и файлы символов. Название артефакта должно содержать версию, номер сборки и идентификатор коммита.

  • Выполнять проверку целостности после сборки
  • Ограничить участников, имеющих доступ на запись в каталог релиза
  • Сохранять сведения о версии toolchain, использованной для генерации
build-check.sh
xcodebuild -version
xcode-select -p
swift --version
git rev-parse --short HEAD
xcodebuild test -scheme "Project" -destination "platform=macOS"

Размещайте проверку версий в начале каждого лога сборки. При обнаружении расхождения окружения сначала сравните пути к toolchain, коммит проекта и lock-файлы зависимостей, а затем решайте, нужно ли очищать кэш.

Эксперименты с моделями ИИ

Проверяйте совместимость инференса и длительных задач на Apple Silicon

Облачный Mac подходит для воспроизведения экспериментального окружения, проверки совместимости toolchain и запуска восстанавливаемых пакетных задач. Возможности оборудования ограничены двумя доступными конфигурациями; не переносите результаты на характеристики, которых нет в списке.

Фиксированная базовая линия входных данных

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

Фиксируйте версии окружения

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

Продумайте точки восстановления

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

Отслеживайте границы ресурсов

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

Плавная миграция с локального окружения

Миграция в три этапа: данные, toolchain, подключение CI

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

01

Этап 1

Перенесите необходимые данные

Копируйте данные проекта преимущественно через репозиторий кода, хранилище артефактов и шифрованную передачу. Исключите кэш, временные каталоги сборки, старые логи и неиспользуемые учётные данные.

Контрольный список

  • Ветки репозитория и подмодули в полном объёме
  • Хэши больших файлов совпадают с локальными
  • Секретные настройки не записаны в репозиторий
  • Данные старого узла всё ещё позволяют откат
02

Этап 2

Воспроизведите toolchain

Зафиксируйте локальную версию Xcode, пути к инструментам командной строки, lock-файлы менеджера пакетов, источники переменных окружения и точки входа скриптов сборки, а затем воспроизведите их в облаке по отдельности.

Контрольный список

  • Версии инструментов и пути записаны
  • Зависимости восстанавливаются в чистом окружении
  • Результаты набора тестов соответствуют базовой линии
  • Сборка выполняется после удаления кэша
03

Этап 3

Подключите планирование CI

Сначала подключите ветки, не связанные с релизом, проверьте метки планирования, тайм-ауты, логи и правила очистки, а затем откройте защищённые ветки и задачи подписи и архивирования.

Контрольный список

  • Метки Runner однозначны
  • Неудачные задачи автоматически очищаются
  • Права релиза доступны только авторизованному процессу
  • Артефакты и логи отслеживаются
Порог переключения

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

Сертификаты и публикация

Ограничьте чувствительные права только необходимыми этапами

HexVM предоставляет выделенный физический узел и удалённый доступ. Команда клиента самостоятельно управляет запросом сертификатов, профилями provisioning, правами связки ключей, разрешением на публикацию и финальной отправкой.

Этап процесса Ответственность команды Выполнение на узле Запись приёмки
Подготовка сертификатов

Определить назначение сертификатов, хранить пароли экспорта и ограничить круг участников с доступом.

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

Имя сертификата, статус действия, авторизованные участники.

Профили provisioning

Поддерживать профили по идентификатору приложения и среде публикации, удаляя недействительные версии.

Перед сборкой проверять соответствие; при ошибке останавливать архивирование.

Идентификатор приложения, сведения о команде, версия файла.

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

Одобрять защищённые ветки и задачи релиза, контролировать параметры сборки.

Выполнять архивирование, экспорт и проверку целостности, возвращая понятный код завершения.

Хэш коммита, номер сборки, сводка архива.

Отправка на публикацию

Проверить сведения о версии, материалы о конфиденциальности, скриншоты и область публикации.

Подготовить проверенные артефакты и окружение инструментов загрузки.

Отправитель, версия артефакта, результат отправки.

Доступ к связке ключей

Разблокируйте её только на этапе подписи и сразу закройте после завершения задачи. Для разных проектов и окружений используйте отдельные политики доступа, чтобы тестовые задачи не наследовали права релиза.

Проверка архива

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

Перед освобождением узла

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

Проверка перед запуском

Контрольный список команды

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

01

Выбор региона

Выбирайте регион с учётом расположения разработчиков, маршрута данных репозитория и направления загрузки артефактов. Сейчас доступны Сингапур, Япония (Токио), Южная Корея (Сеул), Гонконг, восток США и запад США — всего 6 регионов.

  • Качество соединения команды тестирования с узлом
  • Зафиксировать основные направления передачи данных
  • Убедиться, что регион соответствует внутренним требованиям команды
02

Выбор модели

Сначала выполните полную сборку реального проекта, а затем выберите HexVM M4 или HexVM M4 Pro по пиковому потреблению памяти, росту диска и способу параллельного выполнения.

  • Зафиксировать длительность чистой сборки
  • Проверить объём, занимаемый зависимостями и артефактами
  • Не оценивать ёмкость по одной инкрементальной сборке
03

Права доступа к аккаунтам

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

  • Составить список авторизованных участников
  • Разделить права тестирования и публикации
  • Разработать процесс ротации учётных данных
04

Подключение репозитория

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

  • Ограничить область репозиториев и веток
  • Маскировать чувствительный вывод
  • Проверить поведение после отзыва учётных данных
05

Мониторинг и восстановление

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

  • Назначить получателей уведомлений о сбоях
  • Задать порог дискового пространства
  • Регулярно проверять шаги восстановления
06

Анализ затрат

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

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

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

Начать развёртывание

Выберите выделенный Mac для текущего конвейера

Сравните две доступные модели и сроки аренды, настройте регион и дополнительные параметры, а затем оформите заказ. Все платежи производятся в долларах США (USD), а фактическая доступность отображается в консоли в реальном времени.