Регистрация раннера за 10 минут
Ваша машина MacRun представляет собой стандартный self-hosted раннер GitHub Actions. Оставьте свой пайплайн и поменяйте две строки YAML.
Подключение к машине
Ваша машина находится в частной сети Tailscale, а не в открытом интернете. Поэтому нет открытого порта SSH, который можно найти, и ничего не нужно дополнительно защищать. Для входа нужно сделать две вещи, один раз.
Установите Tailscale с tailscale.com/download и войдите. Он бесплатен для личного использования и для аккаунтов того размера, который нужен большинству команд. Работает на macOS, Linux и Windows. Затем примите приглашение, которое мы пришлём, когда машина будет готова. Оно открывает доступ только к этой машине и больше ни к чему в нашей сети.
Точная команда с адресом вашей машины есть в личном кабинете:
ssh runner@100.x.x.x
Никаких паролей и ключей: аутентификацией занимается Tailscale. Если email вашего аккаунта Tailscale отличается от адреса для оплаты, запросите доступ для него в личном кабинете.
Задачам CI Tailscale не нужен. GitHub Actions связывается с раннером через исходящее соединение самого раннера с GitHub. Так что Tailscale нужен, только когда вы хотите получить shell на машине.
Общий экран, когда он нужен
Для CI хватает SSH. Если логов мало, к той же машине можно подключиться через общий экран по той же частной сети. Instruments, Simulator и интерфейс Xcode работают так же, как локально. В личном кабинете указаны адрес, пользователь runner и пароль, уникальный для вашей аренды.
На Mac откройте Finder, затем Go → Connect to Server (⌘K):
vnc://100.x.x.x
На Windows установите RealVNC Viewer или TightVNC и подключитесь к 100.x.x.x:5900. На Linux подойдут Remmina и TigerVNC, адрес тот же. Если клиент спрашивает только пароль, оставьте имя пользователя пустым.
Большинство CI-сервисов этого не умеют. Облачный раннер даёт вам только логи. Если сбой воспроизводится только под Instruments, расследовать его вы не сможете.
Получите токен регистрации в GitHub
В репозитории (или организации) откройте Settings → Actions → Runners → New runner. GitHub покажет одноразовый токен. Его нужно вставить в команду ниже. Раннеры уровня организации доступны всем репозиториям организации.
Зарегистрируйте раннер на машине
Зайдите по SSH, как описано выше, и выполните команду настройки из личного кабинета (метка вашей машины в ней уже подставлена):
cd ~/actions-runner ./config.sh --url https://github.com/YOUR-ORG/YOUR-REPO \ --token <RUNNER_TOKEN> \ --labels self-hosted,macOS,macrun-unit-01 \ --unattended # start it as a service (survives reboots) ./svc.sh install && ./svc.sh start
Демон runner-agent автоматически поддерживает этот сервис в рабочем состоянии. Если сервис упадёт, он будет перезапущен в течение 30 секунд.
Поменяйте две строки YAML
Направьте workflow на раннер. Вот и весь diff:
jobs: build: - runs-on: macos-latest + runs-on: [self-hosted, macOS, macrun-unit-01]
Всё остальное в пайплайне остаётся как было.
Версии Xcode
Свежие версии Xcode уже установлены и закреплены через xcodes. Выберите нужную в задаче или запросите новую версию в личном кабинете (обычно в тот же день):
- run: sudo xcodes select 26.6 - run: xcodebuild -version
Кэши уже тёплые
Машина ваша, поэтому кэши сохраняются на локальном диске между запусками. Не нужно каждый раз всё скачивать заново. Типичные пути:
~/Library/Developer/Xcode/DerivedData # build cache ~/Library/Caches/CocoaPods # pods ~/.gradle ~/.npm ~/.gem # toolchain caches ~/Library/Caches/org.swift.swiftpm # SwiftPM
Вы по-прежнему можете использовать actions/cache, если нужны детерминированные ключи восстановления. Но для большинства iOS-сборок главный выигрыш даёт тёплый локальный диск.
Управление машиной
Перезагрузка, запрос версий Xcode и оплата доступны в личном кабинете. Нужно что-то ещё? Ответьте на любое письмо MacRun, и вам ответит человек.