Skipbox

Почему GitHub Actions медленный и как не собирать всё заново

Большая часть медленного задания GitHub Actions проходит ещё до первого теста. Настроить Node, скачать зависимости, собрать образ Docker — одни и те же минуты на каждый push, пока кто-то в команде ждёт зелёной проверки. При поминутной оплате вы платите и за эти минуты.

Skipbox — это раннер GitHub Actions, который сохраняет свою машину между заданиями, поэтому то, что установило одно задание, остаётся на диске для следующего. Поменяйте одну строку на runs-on: skipbox — и задание выполнится на вашей собственной машине за фиксированные $39 в месяц без лимита минут.

Каждое задание начинается с пустой ВМ

Раннер GitHub — это новая виртуальная машина для каждого задания. На ней нет ничего, что скачало или собрало прошлое задание, поэтому каждое задание восстанавливает одно и то же состояние:

Первые три строки не дают ничего нового. Они лишь возвращают машину туда, где она была вчера.

Кэш GitHub смягчает это, но не меняет. Он вмещает 10 ГБ на репозиторий, удаляет записи, которые ни одно задание не читало 7 дн., а новая feature-ветка не может читать кэш другой feature-ветки. Даже при попадании каждый запуск скачивает и распаковывает архив.

Чего вам стоит ожидание

Допустим, настройка занимает 3 минуты каждого задания, а ваша команда запускает 100 заданий в день. Это 300 минут времени раннеров в день, потраченных на то, чтобы вернуть машину в прежнее состояние, и каждый pull request ждёт свою долю. Ревью начинается позже, слияния происходят позже, а инженеры, пока ждут, переключаются на другое.

При поминутной оплате эти минуты попадают в счёт. Раннер на 4 vCPU, по минутам в месяц:

Суммы GitHub — это счёт после вычета использования, включённого в GitHub Team. Подставьте свои минуты в калькулятор на главной странице; входить не нужно.

А запусков становится только больше:

  • ИИ-агенты для программирования. Каждый push агента запускает CI. Ожидание и счёт растут вместе с числом push, а не людей.
  • Больше тестов. Набор E2E-тестов или матрица повторяют настройку в каждом добавленном задании.
  • Бюджеты. Ограничьте счёт бюджетом GitHub — и в середине месяца задания перестанут запускаться, а с ними остановятся и слияния.

Ускорить самому — это целый проект

Остаться на раннерах GitHub и сделать их быстрыми — значит взять на себя такую работу:

  • Строить ключи кэша по хэшам lock-файлов и настраивать restore-keys, пока они не начнут попадать
  • Добавить buildx и экспортировать кэш Docker через cache-to, в пределах тех же 10 ГБ
  • Делить тесты на шарды, где каждый шард повторяет настройку, а оплачиваемых минут становится больше
  • Или держать собственный self-hosted раннер: развёртывание, обновления ОС, уборка между заданиями и починка, когда он падает

Каждый из этих приёмов обходит машину, которая всё забывает. Skipbox сохраняет машину, поэтому ничего из этого не нужно.

Что меняется в Skipbox

Настройка остаётся на диске. Ваши задания выполняются на собственной машине вашего аккаунта, и она сохраняется между заданиями. Образы Docker, слои и кэш сборки; кэши пакетов npm, pip, Gradle и других; инструменты, которые устанавливают setup-node и похожие actions. Места под кэш минимум в 7× больше, чем у GitHub, без удаления через 7 дн. и без правила веток.

Машины побольше по фиксированной цене. Компиляторы и средства запуска тестов запускают по одному воркеру на ядро, поэтому чем больше ядер, тем короче шаги, упирающиеся в CPU.

Минуты не ограничены на каждом тарифе. Задания в Skipbox не тратят минуты GitHub, поэтому бюджет GitHub их никогда не останавливает.

За машиной не нужно следить. Skipbox создаёт машину, обновляет ОС и инструменты, убирает за каждым заданием, проверяет её состояние и пересобирает машину, которая проверку не прошла.

Переход — это одна строка

jobs:
  build:
    runs-on: skipbox # was ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test
  1. Войдите в Skipbox через GitHub.
  2. Установите GitHub App Skipbox и выберите репозитории.
  3. Измените runs-on и сделайте push.

То, что установит первое задание, будет на диске для второго.

Безопасность

  • Машина принадлежит только вашему аккаунту. Задания других компаний на ней не выполняются.
  • После каждого задания стираются учётные данные раннера, процессы и контейнеры. С 13 ноября 2026 года ваш checkout и результаты его сборки (target/ у Cargo) остаются на вашей собственной машине для следующих заданий; режим «Чистая ВМ для каждого задания» даёт каждому заданию новую машину.
  • Код от людей без прав на запись (например, pull request из форков) выполняется на новой одноразовой машине.

Подробности — в разделе «Как изолированы задания».

Попробуйте на самом медленном задании

Пробный период бесплатный и без карты: он длится 7 дней или 3 000 мин работы заданий — что закончится раньше. Перенесите самое медленное задание на runs-on: skipbox, запустите его два раза подряд и сравните время шагов с GitHub.

Вопросы и ответы

Почему GitHub Actions так медленно работает?

Каждое задание на раннере GitHub начинается на новой ВМ, где нет ничего от прошлого запуска, поэтому до начала тестов оно скачивает инструменты, заново ставит зависимости и пересобирает образы Docker. Skipbox выполняет ваши задания на собственной машине вашего аккаунта и хранит это состояние на её диске, поэтому следующее задание начинает с того места, где остановилось прошлое.

Я добавил actions/cache. Почему workflow всё равно медленный?

Даже при попадании в кэш каждое задание скачивает и распаковывает архив, потому что ВМ каждый раз новая. К тому же кэш GitHub вмещает 10 ГБ на репозиторий, удаляет записи, которые не использовались 7 дн., и недоступен из соседней ветки. В Skipbox кэши пакетов и слои Docker уже лежат на диске машины, и ключами управлять не нужно.

Как ускорить сборку Docker в GitHub Actions?

Дайте сборке слои прошлой сборки. На раннерах GitHub для этого нужно экспортировать кэш через buildx и импортировать его в каждом запуске, в пределах тех же 10 ГБ. В Skipbox образы и кэш сборки Docker остаются на машине между заданиями, поэтому docker build сам повторно использует слои.

Нужно ли переписывать workflow, чтобы перейти на Skipbox?

Нет. Для заданий Linux поменяйте runs-on на skipbox. На машине стоит Ubuntu 24.04 с Docker, Node.js и Python, и ваши шаги и actions выполняются как есть.

Можно ли бесплатно попробовать на своём медленном задании?

Да. Пробный период длится 7 дней или 3 000 мин работы заданий — что закончится раньше, — и карта не нужна. Перенесите самое медленное задание на runs-on: skipbox, запустите его два раза подряд и сравните время шагов с GitHub.

Обновлено 11 ноября 2026 г.

Более быстрый CI/CD с всегда «тёплым» кэшем

Ваш «тёплый» раннер по фиксированной цене

1/12 стоимости GitHub при полной загрузке. Цена фиксированная — гоняйте CI хоть весь день. В 7× больше места под кэш, чем у GitHub.

  • Без карты
  • Вход через GitHub
  • Отмена в любой момент