Автоматизация · подключите репозиторий команды
Направляйте задачи на этот Mac с помощью понятных меток
Узел — выделенная физическая машина, но возможность параллельного запуска задач зависит от памяти, диска и изоляции задач. Сначала проверьте весь процесс на одной сборке, затем увеличивайте параллелизм.
GitHub Actions self-hosted runner
В настройках Actions репозитория или организации добавьте self-hosted runner и выберите macOS и ARM64. Выполните команды загрузки, проверки и регистрации, предложенные на странице. Не используйте устаревшие установочные пакеты из неизвестных источников.
Для регистрации используйте отдельного системного пользователя и добавьте метки назначения vmfly,ios-build и другие. В workflow укажите нужные метки в параметре runs-on , чтобы задача не запускалась в общей среде выполнения.
runs-on: [self-hosted, macOS, ARM64, vmfly, ios-build]
GitLab Runner
Используйте версию Runner, совместимую с вашей средой GitLab, и получите токен аутентификации по инструкции для проекта или группы. В macOS выберите shell executor и присвойте узлу метку macos-arm64 и метки назначения.
Укажите те же tags в задаче конвейера. Убедитесь, что рабочий каталог Runner принадлежит пользователю, от имени которого он работает. Сертификаты, кэш зависимостей и артефакты должны быть доступны тому же пользователю — иначе команда сработает в интерактивном терминале, но завершится ошибкой в автоматической задаче.
ios_archive:
tags:
- macos-arm64
- ios-build
script:
- bundle exec fastlane gym
Проверьте восстановление после перезагрузки
Для GitHub runner в каталоге регистрации выполните сервисный скрипт ./svc.sh install и ./svc.sh start. Для GitLab Runner выполните команды согласно способу установки: gitlab-runner install и gitlab-runner start. Не настраивайте для одного runner сразу два механизма автозапуска.
Службы macOS, работающие как пользовательский LaunchAgent, обычно зависят от сеанса входа этого пользователя. Проверьте фактическую конфигурацию службы и пользователя, от имени которого она запущена: включение при запуске системы не означает, что пользователь сборки вошёл в систему. Когда задачи публикации не выполняются, проверьте запуск после перезагрузки, пути, доступ к связке ключей и экспорт артефактов.
Храните материалы для подписи в защищённом месте
Передавайте сертификаты сборки и профили обеспечения утверждённым командой защищённым способом. Для подписи сертификату нужен соответствующий закрытый ключ — одного открытого сертификата недостаточно. Храните пароль разблокировки и токены автоматизации в защищённых переменных CI и ограничьте список веток и задач, которым они доступны.
Командам, использующим fastlane match, следует придерживаться действующих правил хранения и доступа. При чтении имеющихся материалов для подписи в CI по возможности используйте режим только для чтения. Прежде чем разбираться с самой командой архивации, проверьте bundle identifier, команду разработчиков, способ экспорта и срок действия профиля обеспечения.
Для автоматизированных задач без участия пользователя обеспечьте доступ к нужной связке ключей. Не храните долговременные пароли в скриптах в открытом виде и не выводите в журнал все переменные окружения. Перед передачей журнала удалите из него закрытые ключи, токены, пароли и содержимое материалов для подписи.