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

CI/CD‑агенты часто простаивают, но за выделенную инфраструктуру приходится платить постоянно. Serverless‑подход решает эту проблему: GitLab Runner существует только во время выполнения задачи. Это позволяет экономить при переменной нагрузке.
При интенсивном использовании на GitLab.com может потребоваться привязка банковской карты. Бесплатный тариф ограничен. Оплата недоступна пользователям из России.
Подписки на события, которые запускают функцию при выполнении условия.
GitLab Runner
Есть два распространённых сценария использования раннеров:
Проблема традиционных self‑hosted раннеров в том, что они часто простаивают в ожидании задач, но инфраструктура, на которой они запущены, требует постоянных затрат.
Раньше расходы старались снижать автоматизацией: по расписанию создавали функции в Yandex Cloud Functions, которые включали и выключали виртуальные машины. Такая схема добавляла операционных задач — приходилось писать и сопровождать дополнительный код и инфраструктуру оркестрации. Координацию обеспечивали триггеры, которые в остальное время ожидали сигнал.
У подхода с включением и выключением виртуальных машин два ключевых минуса:
Мы решили эту проблему, внедрив serverless‑подход
В статье расскажу о принципах её работы и особенностях, а также покажу, насколько это выгодно.
Когда в GitLab появляется задача (job), он отправляет в Yandex Cloud вебхук — специальный HTTP‑запрос, который работает как сигнал: в ответ Yandex Serverless Containers создаёт контейнер, внутри которого запускается эфемерный GitLab Runner: он поднимается на время выполнения одной задачи и автоматически удаляется после завершения.
Раннер существует ровно столько времени, сколько требуется для выполнения этой задачи. Он использует docker‑executor
Чтобы такая архитектура работала, Yandex Serverless Containers предоставляет несколько специальных возможностей:
Поддерживается выполнение Docker‑команд внутри serverless‑контейнера. Это обеспечивает продвинутую изоляцию: например, сам пайплайн может запускать собственные контейнеры — скажем, для тестов с базой данных. Это исключает конфликты зависимостей и позволяет использовать разные версии инструментов в одной задаче.

Архитектура запуска GitLab Runner в Yandex Serverless Containers. GitLab отправляет вебхук‑событие в Yandex Cloud, где автоматически разворачивается контейнер с GitLab Runner из Container Registry. Раннер получает аутентификационный токен из Yandex Lockbox, забирает задание через Jobs API и выполняет его в изолированном Docker‑контейнере, после чего возвращает логи в GitLab. Весь процесс происходит по требованию — инфраструктура создаётся только на время выполнения задачи.
Эти четыре функции — эфемерное хранилище, асинхронный запуск, длительный таймаут и запуск Docker‑клиента внутри контейнера — реализованы на уровне платформы Yandex Serverless Containers. Они подходят и для других задач с похожими требованиями: обработки очередей сообщений, конвертации медиафайлов или генерации отчётов по расписанию.
Бессерверные раннеры подходят для большинства CI/CD‑задач, но у них есть технические ограничения, которые влияют на планирование пайплайнов:
Если задачам нужно больше времени или ресурсов, можно использовать контейнеры с длительным циклом работы или традиционные раннеры на виртуальных машинах. Допускается комбинировать разные типы раннеров в зависимости от требований конкретных этапов пайплайна.
Бессерверная архитектура также подразумевает несколько технических особенностей, которые влияют на настройку CI/CD:
Эти данные говорят о том, что сборки на CircleCI обычно короткие и запускаются несколько раз в день. Оценка доли простоя выделенного раннера при такой нагрузке зависит не от статистики CircleCI, а от выбранной модели инфраструктуры. Поэтому рассчитать долю простоя, опираясь только на эти источники, нельзя.
Отчёт CircleCI
Это и есть главная проблема традиционного подхода: виртуальная машина работает круглосуточно в ожидании задач, хотя используется всего пару часов в сутки.
Расчёты произведены по тарифам Serverless Containers и Compute Cloud на дату публикации, без учёта стоимости дисков, количества запросов и с упрощением free tier.
Круглосуточно работающая виртуальная машина с раннером обходится примерно в 2 тыс. рублей в месяц. Если команда запускает сборки всего несколько раз в день (а это довольно частый сценарий), то традиционная виртуальная машина большую часть времени простаивает.
При бессерверном подходе оплата идёт только за фактическое время работы, а не за все 720 часов в месяц, которые активна виртуальная машина (включая сотни часов простоя). Это помогает не только сократить затраты, но и повысить гибкость CI/CD‑инфраструктуры.
Ниже — четыре типичных сценария использования раннеров, от редких сборок до круглосуточной работы.
Сценарии использования раннеров
|
Сценарий |
Утилизация CI |
Суммарное время в мес |
Serverless (2 vCPU + 4 ГБ) |
Compute (сопоставимая виртуальная машина) |
Критерий выбора |
|
Редкие сборки |
≈ 4% |
≈ 30 ч |
≈ 700 ₽/мес |
≈ 3000 ₽/мес |
Serverless: платим только за часы, виртуальная машина простаивает |
|
Переменная нагрузка с пиками |
≈ 7% |
≈ 50 ч |
≈ 1200 ₽/мес |
≈ 3000–6000 ₽/мес |
Serverless: автоскейлинг без переплаты за «запас под пики» |
|
Постоянные сборки (высокая загрузка) |
40–55% |
300–400 ч |
≈ 7200–9600 ₽/мес |
≈ 5000–6000 ₽/мес |
Compute: при стабильной высокой утилизации виртуальная машина дешевле и стабильнее |
|
Почти 24/7 |
90–100% |
650–720 ч |
≈ 15700–17400 ₽/мес |
≈ 5000–6000 ₽/мес |
Compute: заметно дешевле, нет холодных стартов/таймаутов |
Так мы перенесли главные преимущества бессерверных вычислений в CI/CD:
Простое правило для выбора:
Если сборки запускаются нерегулярно или нагрузка сильно меняется от недели к неделе, бессерверный подход выигрывает. Оплата идёт только за фактическое время, система автоматически справляется с пиками нагрузки. И не нужно обслуживать инфраструктуру.
Когда сборки идут почти непрерывно, суммарные часы работы делают выделенную виртуальную машину дешевле. В этом случае ограничения бессерверного подхода — таймауты, «холодный старт» и отсутствие кеша между запусками — становятся более заметными.
Практическое руководство по запуску GitLab Runner в Yandex Serverless Containers