Самохостовые macOS runner на облачных Mac звучат просто, пока не нужно так же аккуратно подключитьGit, приватные реестры пакетов и потоки артефактов, как в GitHub-hosted CI — а затем умножить это наСингапур, Токио, Сеул, Гонконг, восток и запад США. В этом FAQ — как выдавать учётные данные без «божественного» токена, куда класть артефакты и кэши на диске, как разделитьглавный и ведомые узлы по регионам, как соотносятсяMac mini M4 с 16/256 и 24/512 ГБ с тёплыми кэшами и когдакраткая аренда выгоднеесредней, если вы добавляете параллельные runner вместо одной перегруженной машины.
Как Git должен аутентифицироваться на runner?
Выбирайтеузкие учётные данные вместо одного токена на всё. Для read-only клонов с GitHub удобнееfine-grained PAT или deploy key, привязанный к репозиторию: их проще ротировать, чем пароль пользователя. Для доступа на уровне организации — отдельный сервисный аккаунт с минимальной ролью, секреты в хранилище Actions или в вашем vault, подстановка на старте job — без запекания токенов в «золотой» образ. Если есть субмодули или приватные форки, повторите политику для каждого remote: дочерний репозиторий не должен стать слабым звеном. Git LFS включайте только там, где без бинарников нельзя; иначе платите дважды трафиком и местом на каждом тёплом workspace.
Куда попадают артефакты и корпоративные реестры?
actions/upload-artifact и actions/download-artifact на самохосте работают, но разметка диска — ваша: заранее выделите том или каталог с квотой, чтобы один workflow не забил системный SSD. Для GitHub Packages и GHCR в рамках одного репозитория часто хватает job-scoped GITHUB_TOKEN; кросс-репозиторная публикация требует явного PAT или доверия OIDC. Внешние зеркала npm, PyPI, Maven, Swift Package Manager по возможности указывайте нарегиональные зеркала, чтобы в часы пика каждый метрополис не тянул один и тот же upstream. Тяжёлые конвейеры Bazel или Gradle разумно сопровождать удалённым кэшем попаданий — см. Bazel и Gradle: удалённая сборка в пуле облачных Mac.
Шесть регионов: главный узел и ведомые
На каждую крупную команду выберите одинглавный метрополис — обычно ближе к источнику артефактов или основному Git remote — остальные регионы трактуйте какведомые: они переиспользуют прогретые зависимости и бинарники. На главном держите авторитетные тёплые workspace, долгоживущие кэши и тяжёлую упаковку; ведомые сосредоточьте на компиляции и тестах рядом с разработчиками. Восток и запад США не стоит бросать в одну глобальную очередь: шардируйте workflow по продуктовой линии или часовому поясу, а не round-robin через побережья. Пара Сингапур + Токио выигрывает от той же логики: ночные тяжёлые job привязывайте к региону с самым большим кэшем артефактов. Имена очередей, ротация «мест» и биллинг без хаоса — в FAQ про международные команды, ротацию мест и параллельные очереди.
Уровни Mac mini M4, NVMe 1–2 ТБ и параллельные runner
16 ГБ ОЗУ и 256 ГБ SSD подходят для узких smoke-сборок Xcode и небольших графов SPM, если кэши стабильно тёплые.24 ГБ и 512 ГБ — разумный дефолт, когда симуляторы, индексация и «докероподобные» сайдкары делят машину с агентом. Добавляйте1 ТБ или 2 ТБ NVMe, когда удалённые кэши, DerivedData и слои контейнеров регулярно занимают сотни гигабайт: душащий диск не только замедляет сборку, но и съедает экономию от более дешёвой аренды. Два умеренных Mac mini с отдельными runner часто обгоняют один «раздутый» инстанс: изоляция очередей снимает конкуренцию за I/O. Размерируйте каждый runner так, чтобы одна job оставляла запас агенту Actions и системным службам.
Краткая и средняя аренда: практическая матрица
День или неделя уместны, когда вы проверяете новый workflow, всплеск RC или подключаете подрядчиков: выше цена за единицу времени, но ниже риск застрять в неподходящей конфигурации. Переходите намесяц или квартал, когда стабилизировались метки runner, правила файрвола и прогрев кэша — повторное развёртывание с нуля каждую неделю съедает инженерные часы. Если несколько runner делят кэш, срок аренды согласуйте с TTL кэша: средняя аренда окупается, когда вы перестаёте холодно поднимать workspace на сотни гигабайт каждую неделю. Фиксируйте ожидаемую экономию минут на сборку — финансы охотнее принимают «железную» математику, привязанную к длине очереди, чем лозунги.
Для матрицы «два дешёвых узла против одного топового» сравнивайте не только абонентскую плату, но и стоимость простоя очереди: если пик приходится на две недели в квартале, короткие спайки на дополнительный Mac иногда дешевле, чем держать крупный SSD круглый год «на всякий случай». Напротив, стабильный поток из десятков job в сутки почти всегда выигрывает от предсказуемого квартального слота и заранее согласованного расширения NVMe.
- Нужен ли каждому региону полный зеркальный набор артефактов или ведомые могут тянуть кэш с главного по приватному каналу?
- Ротируются ли Git-учётные данные автоматически при замене образа runner?
- Для вашей смеси компиляции и линковки два runner по 16 ГБ обгонят один узел на 24 ГБ?
- Хватает ли запаса SSD на недельные пики без аварийных скриптов очистки?
На облачном железе vpszap это проще эксплуатировать
Всё выше предполагаетвыделенный физический Mac mini с предсказуемыми CPU, ОЗУ и NVMe — не «шумный» сосед, у которого всплеск задержки диска совпал с чужим ffmpeg. vpszap выдаётApple Silicon M4, SSH и VNC примерно за пять минут, с оплатой задень, неделю, месяц или квартал ибез долгосрочного контракта, в том жемультирегиональном контуре, о котором вы уже думаете для runner. Долгоживущий кэш можно держать на одном узле, один раз настроить Git и реестры — и тиражировать схему на ведомые без пересдачи договора с дата-центром.
Если хотите этот сценарий на железе «как лабораторный Mac под столом», но рядом с пользователями, начните с главной страницы облачного Mac mini vpszap.