Задания iOS стали выполняться дольше, но из журналов пока неясно, виноваты ресурсы, очередь или настройки рабочего процесса.
Быстрое решение: для выбора уровня ресурсов macOS executor в CircleCI сначала соберите данные нескольких типичных сборок; не повышайте уровень только из-за размера команды. Меняйте ресурсы, если измерения подтверждают ограничение, а потребность в собственной управляемой среде оценивайте отдельно.
Эта статья для администратора CircleCI, настраивающего ресурсы заданий macOS.
Она также пригодится инженеру CI-платформы, который разбирает длительность сборок и ожидание в очередях.
Руководителю IT она поможет сравнить управляемое исполнение с самостоятельной эксплуатацией Mac-хоста.
Сначала выясните, где расходуется время задания
Общая длительность workflow не показывает, какой именно ресурс следует менять. Разложите результат на этапы: ожидание запуска, получение исходного кода, установка зависимостей, сборка, тестирование и публикация артефактов. Определите, какие этапы выполняются на macOS executor, а какие зависят от внешних сервисов или других заданий.
CircleCI Insights помогает анализировать данные workflow и запусков; доступные представления и детализацию проверьте в официальном руководстве по Insights. Для решения о ресурсах важна не только общая длительность: зафиксируйте продолжительность конкретных этапов и условия запуска, включая состояние кэша и версию инструментов.
Подготовьте выборку репрезентативных запусков: обычная сборка, характерная тестовая задача и задача, которая регулярно вызывает опасения команды. Сопоставляйте только результаты, полученные при сравнимом коде, workflow, настройках кэша и инструментах. Если одна попытка выполнялась с пустым кэшем, а другая — с прогретым, их разница не доказывает, что новый класс ресурсов быстрее.
Разделяйте задержки по происхождению:
- Ожидание до старта: проверьте очередь и доступность параллельного исполнения.
- Зависимости: выясните, связано ли время с загрузкой пакетов, сетью или восстановлением кэша.
- Сборка и тесты: сравните длительность именно вычислительных этапов и ресурсные показатели задания.
- Публикация: проверьте передачу артефактов и работу внешних сервисов.
Если замедлился один этап после обновления Xcode, зависимостей или тестового набора, сначала проверьте это изменение. Смена уровня ресурсов без диагностики может увеличить расход, не затронув причину задержки.
Ресурсные показатели: подтвердите ограничение, а не предполагайте его
В документации CircleCI описаны уровни ресурсов и просмотр сведений об их использовании заданием. Используйте описание resource class и данных использования вместе с конфигурацией workflow: так вы сможете проверить, какие данные доступны именно для нужного задания и выбранной среды.
Фиксируйте наблюдаемые значения CPU и памяти, когда они доступны для вашей конфигурации, и привязывайте их к конкретному этапу. Не смешивайте показания CircleCI с вашими локальными замерами: указывайте источник, способ сбора и временной интервал для каждого набора. Такой журнал позволяет проверить, совпадает ли рост загрузки с ростом длительности, или эти события происходят независимо.
Проверьте конфигурацию macOS executor и название заданного уровня ресурсов по справочнику конфигурации CircleCI. В справочнике также сверяйте поля macOS-окружения и Xcode. Доступные значения и условия применения могут зависеть от текущей конфигурации и учётной записи, поэтому не копируйте старый пример из другого проекта без проверки.
Для интерпретации показателей полезно задать себе несколько вопросов:
- Повторяется ли высокая загрузка на одном и том же этапе, или она возникает только в отдельных запусках?
- Совпадает ли высокая загрузка памяти с замедлением, ошибкой или нестабильностью задания?
- Выполняет ли задание лишнюю работу: повторную сборку, ненужные тесты или установку зависимостей без кэша?
- Сопоставимы ли версия Xcode, код, конфигурация и состояние кэша между запусками?
Показатель, взятый отдельно, не равен диагнозу. Например, заметная загрузка CPU сама по себе не доказывает, что повышение уровня сократит сборку: этап может ожидать сеть, выполнять последовательную операцию или быть ограничен настройками инструмента. И наоборот, отсутствие очевидного упора в CPU не исключает ограничений памяти или проблем с нестабильностью. Формулируйте гипотезу как проверяемое утверждение: «этот этап регулярно замедляется одновременно с такой-то ресурсной картиной».
Ожидание в очереди и ресурсы задания — разные решения
Если задание долго не начинает выполняться, сначала выясните, действительно ли это очередь, а не подготовка самого workflow. CircleCI отдельно описывает правила параллельного выполнения и диагностику очередей в руководстве по concurrency и разделе устранения проблем с ожиданием.
Увеличение ресурсов одного задания и увеличение доступной параллельности решают разные задачи. Первое относится к исполнению конкретной сборки; второе — к тому, сколько заданий может одновременно получить исполнение в условиях вашей конфигурации. Не делайте вывод, что более высокий уровень ресурсов автоматически уберёт очередь. Проверьте применимые правила и условия учётной записи, прежде чем менять план или перестраивать workflow.
Записывайте время старта задания относительно времени его постановки, число ожидающих заданий и контекст запуска — например, массовый запуск после слияния изменений или плановая сборка. Сопоставляйте эти наблюдения с данными Insights и настройками параллелизма. Если очередь появляется только при всплеске задач, это может указывать на потребность пересмотреть распределение работ или правила параллельного запуска, а не на слабый ресурс отдельного Mac.
При этом не считайте очередь безобидной только потому, что ресурсы задания достаточны. Для команды задержка перед запуском может быть существенна сама по себе. Разделяйте в отчёте две величины: время до начала исполнения и время фактической работы. Тогда обсуждение с командой будет опираться на причину ожидания, а не на общее время от отправки изменений до результата.
Самостоятельный Mac-хост меняет границы ответственности
Управляемый macOS executor снимает с вашей команды необходимость самостоятельно обслуживать машину исполнения, но не отменяет проверку соответствия среды вашим требованиям. Перед выбором решения проверьте, какие версии macOS и Xcode доступны в конфигурации CircleCI, как передаются настройки и секреты, какие сетевые направления требуются сборке и как устроены подпись и публикация приложения. Описание среды и настройки macOS сверяйте с руководством CircleCI по macOS executor, а параметры сборки Xcode — с документацией Apple по настройке build settings.
Безопасность, доступ к внутренней сети и процесс подписи нельзя объявлять обеспеченными «по умолчанию» для любого проекта. Составьте требования команды и проверьте каждый пункт в конкретном аккаунте, конфигурации и сетевом контуре. Если внешние задания должны обращаться к корпоративным системам, включите согласование сетевых правил и работы с секретами в пилот до масштабирования.
Самостоятельное управление Mac может быть оправдано, когда команде необходимы контроль над хостом, специализированные настройки, внутренние зависимости или согласованный процесс эксплуатации. Но вместе с этим появляются задачи обслуживания ОС и инструментов, мониторинга, обновлений, доступа, восстановления после сбоев и планирования замены оборудования. Это не бесплатное расширение управляемой среды: ответственность переходит к вашей организации.
В CircleCI есть вариант self-hosted Runner; перед оценкой проверьте обзор Runner и инструкцию по установке machine runner на macOS. Сверьте документацию с требованиями к хосту, доступам и рабочим процессам. Не переносите на Runner обещания о производительности или совместимости: результат зависит от вашей машины, сети, конфигурации и обслуживания.
Если рассматриваете удалённый Mac как часть собственной инфраструктуры, заранее зафиксируйте критерии приёмки: способ доступа, ответственность за учётные записи, сетевые ограничения, операции с сертификатами и порядок восстановления. Для внутренней проработки требований можно использовать руководства по удалённым Mac; вопросы о формате предоставления и эксплуатации сверяйте с разделом ответов UDPMac.
Чек-лист пилота и решение по итогам
До изменения конфигурации договоритесь, какое наблюдение будет считаться подтверждением гипотезы. Проведите испытание на рабочем процессе, который представляет реальную нагрузку команды, и сохраните исходные настройки, чтобы результат можно было повторить. Отдельно отметьте различия в коде, тестах, Xcode, кэше и моменте запуска.
- [ ] Запишите текущую конфигурацию macOS executor, включая
resource_classи настройки Xcode. - [ ] Выберите репрезентативные workflow и сохраните идентификаторы запусков, версии кода и инструментария.
- [ ] Зафиксируйте доступные данные использования CPU и памяти, указав, получены ли они из CircleCI или из собственной системы измерений.
- [ ] Разбейте длительность на ожидание, установку зависимостей, сборку, тесты и публикацию.
- [ ] Сопоставьте время ожидания с очередью и настройками параллельного исполнения.
- [ ] Проверьте сетевые, безопасностные и подписные требования вместе с владельцами соответствующих процессов.
- [ ] Сформулируйте условие пересмотра решения: какие повторяемые наблюдения потребуют нового испытания или перехода к самостоятельному хосту.
Зафиксируйте результат в короткой записи: наблюдение, источник данных, принятое решение, известные ограничения и условие повторной проверки. Если данных недостаточно, оставьте текущий уровень и продлите наблюдение — это лучше, чем менять ресурсы по интуиции. Если загрузка и замедление повторяются вместе, испытайте доступный альтернативный уровень при сопоставимой конфигурации, а затем сравните результаты. Если задержка возникает до запуска, отдельно исследуйте очередь и подходящие для аккаунта возможности параллелизма.
Сравнение вариантов по критериям команды
Оценка ниже — качественная рамка принятия решения, а не обещание результата или характеристика производительности конкретного ресурса. Заполните её своими требованиями и данными пилота.
| Критерий | Остаться на управляемом macOS executor | Испытать другой уровень ресурсов | Оценить self-hosted Mac |
|---|---|---|---|
| Ресурсная картина | Нет подтверждённого повторяющегося ограничения | Показатели и замедление регулярно совпадают на конкретном этапе | Нехватка не решается доступными настройками либо существенен контроль хоста |
| Длительность | Нет воспроизводимого улучшения от изменения | Есть проверяемая гипотеза о влиянии ресурсов на этап | Важны настройки или зависимости, которые нельзя подтвердить в управляемой среде |
| Очереди | Ожидание отсутствует или не относится к ресурсам задания | Сначала проверьте, что причина не в параллельности и очереди | Собственная инфраструктура нужна по отдельному требованию, а не как замена диагностики очереди |
| Эксплуатация | Удобно передать обслуживание среды поставщику | Изменение требует ограниченного пилота и повторного сравнения | Команда готова отвечать за хост, обновления, доступы, мониторинг и сбои |
| Итоговая оценка | Подходит, если ограничение не доказано | Проверить, если гипотеза подтверждается данными | Оценивать, если есть конкретное требование к среде и владелец эксплуатации |
Сравнивая варианты, включите в решение не только время сборки, но и стоимость собственного обслуживания, требования безопасности, доступность сети и ответственность за сбои. Универсального вывода о том, что самостоятельный Mac всегда быстрее или дешевле, из документации платформы сделать нельзя. Это нужно подтверждать расчётом и проверкой в вашей среде.
Если пилот подтвердил нехватку ресурсов, но управляемая конфигурация всё ещё удовлетворяет требованиям к безопасности и окружению, сначала проверьте возможность изменить уровень и повторите сопоставимые измерения. Если подтверждены требования к контролю хоста или интеграции, которые невозможно выполнить в управляемом executor, переходите к отдельной оценке self-hosted решения.
Для пробного удалённого Mac важно заранее определить длительность и критерии приёмки, а не переносить на него весь CI без плана. Если вашей команде нужна именно такая проверка, изучите варианты периодического использования Mac от UDPMac и сопоставьте их с задачами пилота. Для постоянной высокой нагрузки с жёсткими требованиями к физическим интерфейсам или локальному обслуживанию аренда может не подойти — в таком случае сравните её с собственным оборудованием и ответственностью вашей команды.
Часто задаваемые вопросы
Как выбрать уровень ресурсов для macOS executor в CircleCI?
Сравните текущий уровень с данными репрезентативных сборок: загрузкой CPU и памяти, длительностью этапов и временем ожидания в очереди. Проверьте конфигурацию macOS executor и доступность классов ресурсов для вашей учётной записи в документации CircleCI. Если измерения не указывают на нехватку ресурсов, не повышайте уровень только из-за размера команды.
Когда сборке iOS действительно требуется больше ресурсов?
Основанием для испытания другого уровня служит повторяющаяся высокая нагрузка на доступные ресурсы, совпадающая по времени с замедлением конкретного этапа. Сначала исключите изменения кода, инструментария, кэша, зависимостей и параллелизма. Сопоставляйте одинаковые рабочие процессы и версии инструментов, а вывод делайте по серии сопоставимых запусков, а не по одному удачному или неудачному заданию.
Как понять, что Mac-ресурсов для задачи iOS CI не хватает?
Проверьте данные использования ресурсов задания, длительность его этапов и наличие ожидания до старта. Нехватка ресурсов вероятнее, когда ресурсные показатели регулярно упираются в доступный предел и одновременно замедляется вычислительная часть работы. Если задержка приходится на очередь, установку зависимостей или внешнюю службу, увеличение ресурсов отдельного задания может не устранить причину.
Когда компании стоит управлять Mac-хостом самостоятельно?
Рассматривайте собственный Mac-хост, когда подтверждённое требование к контролю среды, сетевому доступу, изоляции или интеграции с внутренними системами не удаётся удовлетворить управляемым исполнителем. Учтите, что вместе с контролем вы берёте на себя установку и обновление среды, доступность хоста, мониторинг и устранение сбоев. Возможности и требования Runner необходимо сверить с актуальной документацией.
Читайте также
Подберите физический Mac под нагрузку ваших сборок
UDPMac предоставляет выделенные физические Mac на Apple Silicon для задач macOS CI, без общей виртуальной среды.
