Сборочная машина команды · порядок запуска

Подключите коммит
к Mac в дата-центре

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

Выделенный физический Mac mini, не виртуальная машина. Два тарифа на Mac с Apple M4 — от $19.2 в день, доступен 365 дней в году.

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

Четыре шага до получения данных для подключения

На регистрацию, настройку, оплату и назначение Mac отведите примерно по 1 минуте — при удачном стечении обстоятельств весь процесс займёт около 4 минут. Это ориентировочное время настройки, а не гарантированный срок выдачи. Ориентируйтесь на статус в консоли: получение письма, подтверждение оплаты и назначение системы могут занять разное время.

  1. Зарегистрируйтесь и откройте консоль

    Около 1 минуты

    Подготовьте рабочий адрес электронной почты, на который можно получить код подтверждения, пройдите регистрацию по подсказкам на странице и задайте пароль. Используйте почту, за которой постоянно следит кто-то из команды: так будет удобнее проверять заказы, продлевать аренду и отслеживать заявки. Не пересылайте коды подтверждения в общедоступные журналы сборки.

  2. Выберите модель, срок и узел

    Около 1 минуты

    Выберите Push M4 S или Push M4 L, затем срок оплаты и узел. Для повседневного CI одного приложения можно начать с тарифа 16 ГБ, а для параллельного архивирования нескольких target — рассмотреть 24 ГБ. Фактическая доступность отображается в консоли в реальном времени.

  3. Оплатите в долларах США

    Около 1 минуты

    Выберите USDT-TRC20 или оплатите картой Visa / Mastercard / Amex через Stripe. Доступные способы оплаты указаны на странице оформления заказа. При переводе в блокчейне проверьте сеть, адрес и сумму и дождитесь подтверждения в консоли. Отправленный платёж ещё не означает, что Mac уже готов.

  4. Получите Mac и данные для подключения

    Около 1 минуты

    После назначения Mac проверьте узел, адрес подключения, порт и имя пользователя в заказе или сведениях об инстансе, затем получите данные для SSH/VNC. Для обращения в поддержку достаточно номера заказа — пароль и закрытый ключ не передавайте.

Рабочее место — ближе к команде, сборка — ближе к зависимостям

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

Сингапур

В первую очередь рассмотрите этот узел, если основная часть команды находится в Юго-Восточной Азии. Проверьте на практике и привычное подключение к Mac, и загрузку зависимостей.

Часовой пояс команды: UTC+8

Токио

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

Часовой пояс команды: UTC+9

Сеул

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

Часовой пояс команды: UTC+9

Гонконг

Рассмотрите этот узел для взаимодействия с Южным Китаем и Юго-Восточной Азией. Используйте удалённый рабочий стол для работы с интерфейсом, а SSH — для командной строки; журналы храните в системе сборки.

Часовой пояс команды: UTC+8

Восток США

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

Часовой пояс команды: UTC−5 / UTC−4

На востоке США часовой пояс меняется сезонно. Если в обоих регионах нужны частые сеансы работы, арендуйте узлы поближе к каждой команде и распределяйте задания через очередь CI. Даже на одном выделенном Mac необходимо ограничивать число параллельных ресурсоёмких задач.

Сначала подключитесь по SSH, затем откройте рабочий стол macOS

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

SSH: проверьте доступ к командной строке

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

printf 'Адрес подключения: '
read -r MAC_HOST
printf 'Порт SSH: '
read -r MAC_PORT
printf 'Имя пользователя: '
read -r MAC_USER
ssh -p "$MAC_PORT" "$MAC_USER@$MAC_HOST"

После входа выполните whoami и sw_vers, чтобы проверить имя пользователя и сведения о системе. При настройке SSH-ключей загружайте только открытый ключ; закрытый ключ храните на своём устройстве или в хранилище секретов CI.

VNC: проверьте рабочий стол

  1. Войдите в консоль и откройте данные для подключения к выданному инстансу.
  2. Подключитесь к удалённому рабочему столу способом, указанным для инстанса, и проверьте адрес и данные аутентификации.
  3. После входа в macOS проверьте клавиатуру, экран и сеть. Задайте пароль VNC по правилам команды.
  4. Завершите первоначальную настройку Xcode и предоставьте необходимые разрешения для Связки ключей, затем вернитесь в SSH и запустите сборку.

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

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

Первую сборку нужно проверить по четырём пунктам: инструменты, проект, подпись и экспорт. Команды ниже подходят для проекта iOS с workspace. Если у вас только project, замените -workspace на -projectи укажите имя файла проекта.

Проверьте выбранные инструменты

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

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

Клонируйте репозиторий и найдите общую схему

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

printf 'Адрес репозитория: '
read -r REPOSITORY_URL
git clone "$REPOSITORY_URL" app
cd app
git rev-parse HEAD
find . -name '*.xcworkspace' -prune
xcodebuild -list -workspace MyApp.xcworkspace

Зафиксируйте пути и создайте архив

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

mkdir -p build
xcodebuild \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -derivedDataPath build/DerivedData \
  -archivePath build/MyApp.xcarchive \
  archive

Создайте артефакты по настройкам экспорта проекта

ExportOptions.plist Файл должен соответствовать принятым в проекте настройкам подписи и распространения приложения — не копируйте его настройки у другой команды. Успешное создание архива не гарантирует успешный экспорт: сохраняйте коды завершения и журналы обоих этапов отдельно.

xcodebuild -exportArchive \
  -archivePath build/MyApp.xcarchive \
  -exportPath build/export \
  -exportOptionsPlist ExportOptions.plist

test -d build/MyApp.xcarchive
find build/export -maxdepth 1 -type f -print

Зафиксируйте четыре параметра, но не ключи

Запишите SHA коммита, версию Xcode, фактическое имя схемы и путь к артефакту. При первой ошибке начните с самого раннего сообщения: если не разрешаются зависимости, проверьте сеть и версии в lock-файле; при ошибке подписи — сертификат и профиль подготовки; при сбое экспорта — настройки экспорта. Не меняйте одновременно узел, инструменты и настройки подписи при повторном запуске.

Передайте проверенные команды CI-сервису

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

Зарегистрируйте runner и задайте метки для заданий

В настройках проекта или организации на платформе CI получите команду установки runner для macOS ARM64. Используйте регистрационные данные текущего проекта, а не устаревший токен. Метки должны указывать узел, архитектуру и назначение runner.

  • GitHub Actions: создайте команду регистрации в разделе Self-hosted runners и проверьте, к каким репозиториям она предоставляет доступ.
  • GitLab Runner: зарегистрируйте runner по адресу и токену проекта, а для задач с Xcode выберите подходящий способ выполнения.
  • Разрешайте доступ к ресурсам для подписи только доверенным конвейерам и не запускайте непроверенный код на Mac с ключами.

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

Настройте автозапуск и проверьте службу в фоне

После распаковки и регистрации runner GitHub Actions скрипты служб из комплекта можно запустить в каталоге установки. Эти команды не скачивают runner и не регистрируют его: сначала выполните предыдущий шаг по инструкции платформы CI.

./svc.sh install
./svc.sh start
./svc.sh status

Убедитесь, что скрипт сообщает о работающей службе, а на платформе CI runner отображается как доступный. LaunchAgent обычно требует активного сеанса пользователя. Для запуска без участия пользователя настройте и проверьте поддерживаемый для runner способ — установка службы сама по себе не гарантирует, что сборка запустится после перезагрузки.

Финальная проверка: сборка запускается без открытого терминала

Закройте терминал, из которого вручную запускали runner, и отправьте контролируемое задание из CI. Проверьте пользователя, выбранную версию Xcode, доступ к Связке ключей, каталоги кэша и загрузку артефактов. Для узла, предназначенного для работы без участия пользователя, проверьте состояние runner после восстановления. Перед перезагрузкой убедитесь, что другие задания не выполняются.

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

Используйте эту проверенную схему для следующего коммита

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