VPS под GitLab Runner: сколько ресурсов нужно CI и когда свой раннер дешевле

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

Когда есть смысл поднимать свой раннер

GitLab даёт общие раннеры с ограничением по минутам. Пока пайплайнов немного, этого хватает. Свой раннер начинает окупаться в трёх случаях: минут стабильно не хватает, сборки долгие и хочется их ускорить, либо в пайплайне нужен доступ к внутренней сети или специфическому окружению.

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

Третий сценарий — приватность: код и артефакты не покидают вашу инфраструктуру. Для части команд это решающий довод.

Сколько ресурсов закладывать

Отправная точка для одного раннера с одним-двумя параллельными джобами: 2 ядра, 4 ГБ оперативной памяти, диск от 40 ГБ. На этом комфортно собираются типовые веб-проекты и небольшие сервисы.

Для команды с регулярными пайплайнами и несколькими параллельными джобами — 4 ядра, 8 ГБ памяти, диск от 80 ГБ. Помните, что параллельные джобы делят ресурсы машины: четыре одновременные сборки на двух ядрах будут выполняться дольше, чем последовательно.

Настройка concurrent в конфигурации раннера должна соответствовать железу. Поставить восемь параллельных джобов на двухъядерной машине можно, но каждая сборка станет тормозить остальные, а на тяжёлых шагах вы упрётесь в память.

Диск заканчивается первым

Самая частая проблема самостоятельного раннера — не нехватка процессора, а закончившееся место. Docker-образы, слои сборки, кэш зависимостей и артефакты накапливаются с каждым запуском и без уборки съедают диск за недели.

Поэтому берите диск с запасом и обязательно настройте регулярную очистку неиспользуемых образов и томов. Тип диска тоже важен: сборка активно читает и пишет, и SSD или NVMe заметно быстрее HDD на этой нагрузке.

Отдельно заложите место под кэш, если пользуетесь им осознанно: кэш ускоряет пайплайны ровно до тех пор, пока для него есть место.

Где размещать раннер

Раннер общается с сервером GitLab, реестрами образов и репозиториями пакетов, поэтому важна не столько география, сколько стабильность и скорость канала.

Площадка в России удобна, если раннер должен ходить во внутреннюю сеть компании или деплоить на российские серверы — меньше задержка и проще с доступами. Европейская площадка бывает выгоднее, когда пайплайн активно тянет образы и пакеты из зарубежных реестров.

Если деплой идёт на ваши же серверы, разумно держать раннер рядом с ними: это сокращает время выкладки и упрощает сетевые правила.

Безопасность: раннер имеет доступ ко всему

Раннер выполняет код из репозитория и держит переменные окружения с секретами. Фактически это машина с доступом к вашим ключам деплоя, реестрам и, возможно, продакшену.

Отсюда два правила. Первое: не запускайте на одном раннере пайплайны из доверенных и недоверенных источников — например, сборки merge request от внешних участников. Второе: используйте Docker executor, чтобы каждая сборка шла в изолированном контейнере, а не напрямую в системе.

И держите раннер отдельно от продакшен-серверов: компрометация сборочной машины не должна автоматически означать компрометацию боевой.

Типичные ошибки

Поставить количество параллельных джобов больше, чем тянет железо. Пайплайны начинают мешать друг другу, и общее время растёт вместо того, чтобы падать.

Не настроить очистку Docker-образов. Через несколько недель раннер встанет с ошибкой нехватки места, обычно в самый неудачный момент.

Экономить на памяти: сборки фронтенда и тесты с поднятой базой данных потребляют её заметно больше, чем кажется по размеру проекта.

Держать раннер на той же машине, что и продакшен, ради экономии.

Чек-лист перед выбором

  • Оцените, сколько параллельных джобов вам реально нужно, и приведите concurrent в соответствие с ядрами
  • Заложите память с запасом: сборки фронтенда и тесты с базой требуют больше, чем кажется
  • Берите SSD или NVMe — сборка активно читает и пишет
  • Настройте регулярную очистку Docker-образов и томов с первого дня
  • Оставьте место под кэш зависимостей, если планируете им пользоваться
  • Разместите раннер рядом с целью деплоя, если выкладываете на свои серверы
  • Используйте Docker executor и не смешивайте доверенные и внешние пайплайны
  • Держите раннер отдельно от продакшен-серверов

Частые вопросы

Сколько ресурсов нужно для GitLab Runner?

Для одного раннера с одним-двумя параллельными джобами достаточно 2 ядер, 4 ГБ оперативной памяти и диска от 40 ГБ. Для команды с регулярными пайплайнами и несколькими параллельными сборками берите 4 ядра, 8 ГБ памяти и диск от 80 ГБ. Параллельные джобы делят ресурсы машины, поэтому настройка concurrent должна соответствовать железу.

Зачем свой раннер, если есть общие?

Есть три причины. Общих минут перестало хватать; нужно ускорить сборки за счёт контроля над кэшем зависимостей и слоями Docker между запусками; либо пайплайну нужен доступ во внутреннюю сеть или особое окружение. На практике выигрыш от кэша часто оказывается заметнее, чем от более быстрого процессора.

Почему на раннере постоянно заканчивается место?

Docker-образы, слои сборки, кэш зависимостей и артефакты накапливаются с каждым запуском. Без регулярной очистки неиспользуемых образов и томов диск заполняется за недели. Это самая частая проблема самостоятельных раннеров — чаще, чем нехватка процессора или памяти.

Можно ли держать раннер на том же сервере, что и продакшен?

Не стоит. Раннер выполняет код из репозитория и хранит переменные окружения с секретами — фактически это машина с доступом к ключам деплоя и реестрам. Компрометация сборочной машины не должна автоматически означать компрометацию боевого сервера, поэтому их разделяют.

Провайдеры с подходящими тарифами

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

  • Selectel

    VDS 2-4-50 · 2 vCPU · 4 GB RAM · 50 ГБ SSD

    от 650/мес

  • AdminVPS

    Micro (3,6 ГГц) · 2 vCPU · 4 GB RAM · 60 ГБ NVMe

    от 799/мес

  • FirstVDS

    Разгон (SSD) · 2 vCPU · 4 GB RAM · 60 ГБ SSD

    от 919/мес

Готовы выбрать тариф под эту задачу?

Мы подобрали подходящие тарифы и отсортировали их по цене и выгоде.

Подобрать тарифы →