Три типовые боли общего удалённого Mac
- Один клон — одна ветка на диске: коллизии в Xcode и потеря воспроизводимости при совместной работе.
- Ресурсный предел пула: тяжёлые параллельные сборки и борьба за Simulator и ключи дают непредсказуемую очередь.
- Гонки зависимостей: параллельные записи в lock-файлы,
Podsиnode_modulesломают job без бага в коде.
Очереди и квоты — FAQ общего пула Mac; метки и runner — в разделе про конкурентность ниже.
Git worktree и один репозиторий с несколькими рабочими каталогами: сравнение
Git worktree добавляет рабочий каталог к тому же .git: меньше дублирования объектов, быстрее контекст веток, чем полный второй клон. Без worktree обычно либо второй клон, либо рискованное копирование дерева. На удалённом Mac выбирайте режим по диску, изоляции и владельцу очистки.
| Критерий | Несколько worktree | Несколько полных клонов | Один клон и частые checkout |
|---|---|---|---|
| Диск и дедупликация объектов | Общая база объектов; выгодно для пула | Больше диска, проще удалить целиком | Мало копий, дорогой checkout |
| Изоляция параллельных сборок | Сильная при одной job на дерево | Максимум изоляции | Слабая: гонки кэшей |
| Операционная сложность | Нужны имена, prune, права | Проще новичкам, больше sync | Дёшево до первого сбоя |
| Риск конфликтов lock | Средний без мьютекса install | Низкий при раздельных job | Высокий при параллели в одном дереве |
Стратегии lock-файлов: CocoaPods, npm и смежные экосистемы
CocoaPods: в CI опирайтесь на закоммиченный Podfile.lock; pod install только внутри одного worktree без второго процесса в том же пути. Несколько job — сериализуйте запись в Pods или отдельное дерево на задачу. Зафиксируйте Ruby/Bundler для стабильности пула.
npm: в скриптах используйте npm ci с package-lock.json; не меняйте lock через npm install на общем хосте. Синхронизируйте версию Node с удалённым Mac. В монорепо отдельные worktree уменьшают пересечение node_modules при параллельных сборках.
SPM/Xcode: разделяйте DerivedData по рабочим путям. Изоляция SSH и прав — FAQ SSH/VNC.
Параллелизм, верхняя граница и очередь на общем Mac
Параллельные сборки упираются в ядра, SSD и Simulator. Старт: одна тяжёлая Xcode-job на класс Mac; до двух лёгких задач при CPU стабильно ниже ~75% и свободной RAM ≥ ~8 ГБ. Очередь глубже ~20 задач на пул — пора второй удалённый Mac или дробление пулов.
Отменяйте устаревшие проверки в CI. Матрица self-hosted runner и очередей дополняет лимиты worktree. Документируйте владельца мьютекса подписи и окно обслуживания, чтобы интерактивные сессии не ломали ночной прогон и согласованность команды всегда сохранялась.
Матрица решений и параметры
Быстрый выбор перед сменой пула. Параметры: число веток на Mac, доля нативных зависимостей, жёсткость lock, целевое ожидание в очереди.
| Паттерн нагрузки | Рекомендуемая схема | Ключевые параметры |
|---|---|---|
| Мало веток, редкий CI | Один клон/дерево, жёсткий checkout | Параллелизм 1; диск; lock из main |
| Несколько PR одновременно на одном Mac | Worktree на PR/задачу | Имя по id; prune; мьютекс pod/npm |
| Высокий риск гонок lock | Два клона или серийный install | Один писатель lock; кэш по хэшу |
| Регулярные срывы SLA очереди | Второй Mac или split пулов | SLO ожидания; метрики старта; диск |
Пошаговое внедрение (минимум пяти шагов)
- Имена worktree
repo__task__branchи владелец очистки в runbook. - CI: на job — клон или
git worktree addна коммит; без параллельной записи в один путь. npm ciи фиксированный lock; CocoaPods — Bundler и эксклюзивный install или отдельное дерево.- Лимит тяжёлых сборок; чистка кэшей при свободном диске ~15–20% по белому списку.
- Еженедельно
git worktree listиprune; при росте очереди планируйте второй удалённый Mac.
FAQ: откат и очистка
- Как откатить неудачный эксперимент в отдельном worktree?
git worktree removeпосле сохранения нужных изменений; не трогайте чужие сессии на общем Mac.- Остались «висячие» записи после ручного удаления каталога
git worktree pruneв основном клоне; обновите пути в CI.- Когда лучше отказаться от worktree в пользу второго клона?
- Если метаданные worktree ломаются чаще выгоды; либо политика требует раздельных клонов по контурам.
Цифры для runbook (можно копировать в соглашение команды)
- Тяжёлая сборка: старт с одной job на класс Mac; вторая — по метрикам.
- Лёгкие job: до двух при CPU ~<75% и RAM ≥ ~8 ГБ свободно.
- Очередь и диск: алерт при ~20+ ожидающих; чистка кэшей при ~15–20% свободного тома, не трогая ключи.
Арендуйте удалённый Mac под worktree и параллельный CI
Масштабируйте пул удалённых Mac для очереди и изоляции lock-файлов. Тарифы — на главной; покупка и узлы без входа — страница покупки. Справка: центр помощи, блог.