Мои workflow заработают без изменений?
Да, в большинстве случаев. Skipbox запускает workflow публичных и приватных репозиториев в организациях и личных аккаунтах GitHub. ВМ — Ubuntu 24.04 на x64 с Docker, git, build-essential, Node 22 и Python 3.12, а задание выполняется от пользователя с sudo без пароля, как на раннерах GitHub. В образе ubuntu-latest от GitHub предустановлено больше, поэтому для других инструментов добавьте actions/setup-java, actions/setup-go и подобные.
Почему так дёшево?
Код всё чаще пишет ИИ, CI запускается с каждым месяцем всё чаще, а поминутная оплата растёт с каждым запуском. Поэтому Skipbox сознательно выбрал другую модель: вы арендуете ВМ только для своего аккаунта, помесячно. GitHub не берёт плату за минуты self-hosted раннеров, поэтому сколько бы заданий вы ни запускали, цена остаётся фиксированной: $39 в месяц за S. Fluxenic, компания, которая стоит за Skipbox, использует серверы недорогих облачных провайдеров и собственные и предоставляет их в виде ВМ удобного размера. Скучную часть Skipbox берёт на себя: регистрирует раннеры, убирает за каждым заданием и проверяет состояние машины. Он также пересобирает сломавшуюся машину и поддерживает образ в актуальном состоянии. При полной загрузке цена составляет 1/12 цены GitHub и 1/8 цены Blacksmith.
Почему так быстро?
Потому что машина принадлежит только вашему аккаунту и продолжает работать между заданиями. Слои Docker и кэши пакетов от прошлого задания остаются на её диске, поэтому сборке, которая их использует, не нужно скачивать или пересобирать их заново. Задание на раннере GitHub каждый раз начинается на новой ВМ с пустым диском. Даже S хранит кэши на собственном диске на 80 ГБ. Это более чем в 7x больше кэша, чем GitHub по умолчанию даёт репозиторию, и ничего в нём не удаляется после 7 дн. без использования. У S также 4 vCPU — больше, чем у 2-ядерного ubuntu-latest в приватном репозитории.
Разве не дешевле арендовать свой VPS и сделать из него раннер?
Арендуйте VPS того же размера у крупного хостера — и всё равно не получите self-hosted раннер, который дешевле, быстрее и проще в обслуживании, чем Skipbox. Skipbox регистрирует новый раннер для каждого задания и удаляет его после. После каждого задания он стирает учётные данные раннера и сохраняет ваш checkout и результаты сборки для следующего. Он проверяет состояние машины, пересобирает её, если проверка не прошла, и поддерживает образ в актуальном состоянии. Код от людей без прав на запись (например, pull request из форков) выполняется на одноразовой ВМ. Всё это вы получаете за $39 в месяц на S, изменив одну строку runs-on и ничего не обслуживая.
Skipbox работает с публичными репозиториями?
Да, и с публичными, и с приватными. Код от людей без прав на запись (например, pull request из форков) выполняется на новой ВМ, которая читает ваши кэши, но не может их изменить; ваша собственная машина выполняет только код вашей команды.
Минуты действительно не ограничены?
Да. Тарифы стоят $39, $79 или $149 в месяц, оплата в долларах США ежемесячно или за год вперёд по цене 10 мес., без платы за использование. Тариф ограничивает не минуты, а число одновременных заданий и размер каждого: задание, которое не помещается, ждёт, пока завершится одно из запущенных, и ожидание ничего не добавляет к счёту. Страница вашей организации в Skipbox показывает, сколько заданий ждёт и сколько ждёт самое давнее. Задание может выполняться до 6 часов.
Как крупные задания учитываются в числе одновременных?
Одновременные задания считаются в заданиях на 4 vCPU. Тариф одновременно выполняет задания в пределах своего общего числа vCPU (S 4, M 8, L 16 vCPU), поэтому задание на 8 vCPU считается как 2, а на 16 vCPU — как 4. Самое большое отдельное задание, которое может выполнить тариф, равно его числу vCPU: 4 на S, 8 на M, 16 на L. Чтобы выполнять больше заданий одновременно, добавьте тарифы.
Чем Skipbox отличается от раннеров GitHub?
Каждое задание на Skipbox S получает 4 vCPU и 16 ГБ; ubuntu-latest от GitHub в приватном репозитории — это 2-ядерный ЦП и 8 ГБ. Кроме того, ваша собственная машина хранит слои Docker и кэши пакетов от прошлого задания, поэтому сборке, которая их использует, не нужно скачивать их снова; задание на раннере GitHub каждый раз начинается на новой ВМ. docker build и docker compose build повторно используют слои. Сборщик по умолчанию в docker/setup-buildx-action в каждом задании стартует пустым, поэтому задайте ему driver: docker, чтобы использовать кэш самой машины. После того как ваше первое задание выполнится в Skipbox, панель управления покажет его время рядом с медианой на GitHub за последние 30 дн., если GitHub его тогда запускал.
На раннере GitHub моей сборке не хватает памяти. Сколько памяти у Skipbox?
16 ГБ на тарифе S, на вашей собственной машине: в 2× больше, чем 8 ГБ у ubuntu-latest в приватном репозитории, и столько же, сколько у larger runner от GitHub (4 ядра). Раньше на тарифе S было 8 ГБ, и этого не хватало для openai/codex (rust-v0.159.3): cargo clippy --workspace --tests завершилась, только когда около 14 ГБ ушло в сжатый swap. Сейчас на нём 16 ГБ, и та же сборка уходит в swap примерно на 20 МБ. Для задания, которому нужно больше, на тарифе L есть 32 ГБ.
К чему у Skipbox есть доступ?
Только к тому, что нужно для регистрации раннеров и проверки заданий. В организации приложение Skipbox CI запрашивает три разрешения: Self-hosted runners (запись) — чтобы регистрировать раннер в GitHub для каждого задания и удалять его, когда задание завершится; Actions (чтение и запись) — чтобы видеть, какие задания ждут, проверять их статус, читать, сколько выполнялись ваши задания за последние 30 дн., для расчёта стоимости, и перезапускать задание, если машина Skipbox остановилась посреди него; и Metadata (чтение). Приложение Skipbox CI никогда не редактирует и не пушит ваши workflow и не может читать ваш код: каждое задание само делает checkout кода на той ВМ, где выполняется. В личном аккаунте GitHub регистрирует раннер для репозитория только с разрешением Administration, которое также охватывает настройки репозитория, соавторов и ключи развёртывания. Skipbox (personal) запрашивает его и использует только для регистрации и удаления раннеров. Есть одно исключение, и только если вы его установите: кнопка «Открыть pull request» в панели управления использует отдельное приложение, Skipbox Migrate, которое вы устанавливаете только в выбранные репозитории. Там оно запрашивает доступ на запись к Contents, Workflows и Pull requests, пушит одну ветку (skipbox/run-ci-on-skipbox), в которой меняются только строки runs-on, и открывает из неё pull request. Оно никогда не мержит и не трогает вашу ветку по умолчанию. При входе Skipbox также читает ваш адрес электронной почты — для уведомлений о пробном периоде и оплате. Как и на любом раннере, ВМ задания хранит секреты вашего workflow и токен GitHub для этого задания, поэтому код, который выполняет задание, может их прочитать.
Где выполняются задания?
На собственной машине вашей организации: ВМ размера вашего тарифа (и во время пробного периода тоже), плюс ещё одна с каждым дополнительным тарифом. Другие организации ею не пользуются. Она продолжает работать между вашими заданиями, поэтому образы Docker, кэши, ваш checkout и результаты его сборки (target/ у Cargo, а с turbo 2 и кэш Turborepo) остаются для следующих заданий. Она работает на серверах, которые Fluxenic, компания, стоящая за Skipbox, арендует у облачных провайдеров или держит сама. В политике конфиденциальности перечислены все провайдеры и страны. После каждого задания стираются учётные данные раннера, учётные данные git в checkout и распространённые файлы с учётными данными. Задания сверх ваших собственных машин, код от людей без прав на запись (например, pull request из форков) и все задания при включённом режиме «Чистая ВМ для каждого задания» выполняются на новой ВМ, которая удаляется вместе с диском, когда задание завершается. Задание, которое всё ещё выполняется через 6 часов, останавливается. Входящие подключения из интернета невозможны. Исходящая почта (TCP-порт 25) заблокирована. Остальной интернет открыт, как на раннерах GitHub. Трафик не тарифицируется.
Можно начать машину с нуля или запускать каждое задание на новой ВМ?
Да. Нажмите «Сбросить машину» на странице «Тарифы и оплата» в любой момент. Включите там «Чистая ВМ для каждого задания» — и каждое задание будет выполняться на новой ВМ.
Можно отменить подписку или вернуть деньги?
Отменить можно в любой момент; тариф работает до конца оплаченного месяца или года. Если ваши задания в Skipbox не быстрее, чем были на GitHub, вы получите обратно всё, что заплатили, — и на месячных, и на годовых тарифах: запросите возврат на странице «Тарифы и оплата» вашего аккаунта в течение 30 дн. после первого платежа. Skipbox берёт медианное время каждого задания в Skipbox и на GitHub (за 30 дн. до установки Skipbox), взвешивает каждое задание по тому, как часто оно запускалось на GitHub, и сравнивает две суммы; задание учитывается, когда оно запустилось не менее 3 раз на каждом, а если сравнивать нечего, возвращать тоже нечего. Если первое задание, запущенное после оформления подписки, не начнётся в течение 10 мин (без учёта времени ожидания за вашими же заданиями), мы автоматически вернём всю оплату и завершим тариф. В остальных случаях оплаченный месяц или год не возвращается, кроме случаев, перечисленных в Условиях.
Что будет, когда закончится пробный период? С меня спишут деньги?
Ничего не спишется: для пробного периода не нужна карта. Он начинается с вашего первого задания в Skipbox, а не со входа или установки приложения, и выполняет одно задание 4 vCPU · 16 ГБ за раз в течение 7 дней или 3 000 мин — смотря что наступит раньше. Пробный период — 1 на аккаунт и 1 на человека. Когда он закончится, новые задания будут ждать на GitHub, пока вы не выберете тариф.
Как запустить задание в Skipbox и вернуть его обратно?
Чтобы перейти, измените runs-on на skipbox, а чтобы вернуться — обратно на ubuntu-latest. Войдите через GitHub, установите приложение Skipbox CI в организацию или Skipbox (personal) в личный аккаунт, измените строку runs-on задания на skipbox и сделайте коммит; для ВМ побольше на тарифах, где она есть, используйте skipbox-8x16 или skipbox-16x32. Чтобы вернуться, замените runs-on: skipbox обратно на runs-on: ubuntu-latest. Больше ничего в вашем репозитории не меняется.