03
Production-подпись требует отдельного контролируемого Mac
Релизный pipeline отличается от тестового не длительностью, а ценой ошибки. На нём могут присутствовать постоянный Keychain, Provisioning Profile, сертификаты подписи, аккаунт публикации и кэш зависимостей. Если такой Agent используется для обычных Pull Request, граница между кодом проверки и полномочиями выпуска становится слишком широкой.
Self-hosted Mac подходит для этих задач, когда команда готова принять операционную ответственность:
- за физический или удалённый доступ к узлу;
- за обновление macOS, Xcode и Agent;
- за резервирование и восстановление Keychain;
- за отзыв сертификатов после инцидента;
- за журналирование команд, изменений и подключений;
- за очистку рабочих каталогов после неудачной сборки;
- за контроль прав проекта и pipeline на уровне Agent Pool.
Microsoft описывает установку и эксплуатацию macOS self-hosted Agent в отдельной документации. В ней необходимо проверить требования к учётной записи, запуску службы и обновлению агента, прежде чем объявлять узел production-готовым: документация по macOS self-hosted Agent.
Какие задачи подходят для self-hosted Mac в Azure DevOps? Регулярные подписанные релизы, сборки с приватными зависимостями, доступ к внутренним API, длительные jobs с дорогим кэшем и процессы, где требуется удалённое восстановление в заранее известное состояние. Самостоятельный Mac не отменяет обслуживание, но позволяет зафиксировать цепочку доверия и доказать, кто имел доступ к секрету.
Production-пул нельзя смешивать с обычными тестами даже при наличии разных YAML-условий. Разделяйте их на уровне Agent Pool и прав проектов. Для release-job задавайте отдельную метку, например ios-release-arm64, а тестовый маршрут направляйте на пул без секретов. Полезно также требовать ручное подтверждение перед этапом подписи и хранить журнал выдачи credentials отдельно от лога компиляции.