Свой CI/CD vs GitHub Actions / GitLab: цифры по скорости и стоимости на 15 репозиториях

В чате разработки всплывает сообщение от тимлида: «GitHub Actions опять сожрал 14 тысяч минут за выходные. Счёт на 38 тысяч рублей. Что делаем?»

Свой CI/CD vs GitHub Actions / GitLab: цифры по скорости и стоимости на 15 репозиториях

Я открыл таблицу. Пятнадцать репозиториев. Две команды. Три разных стека. И вечный вопрос: свой CI/CD или чужой облачный.

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

Контекст: что у нас было

Компания — продукт на стыке логистики и финансов. 70 человек, из них 18 разработчиков. Репозиториев ровно 15:

  • 6 бэкенд (Go + PHP)
  • 4 фронт (React + Vue)
  • 3 мобильных (Flutter)
  • 2 инфраструктурных (Terraform + Ansible)

Раньше всё крутилось на GitHub Actions. Потом часть перетащили на GitLab.com. Потом подняли свой GitLab CE + runners на железе. Потом вернули часть обратно. Классика жанра: «пока толстый сохнет, худой сдохнет», только вместо коров — пайплайны.

Серверы для своего CI стоят в том же ДЦ, где и продакшен. Два физических хоста под Proxmox, на них LXC и виртуалки с runners. Никакого Kubernetes — мы уже обжигались.

Сколько это реально стоит

Я собрал цифры за полный 2025 год и пересчитал на текущие тарифы 2026-го. Вот честная таблица.

Свой вариант выглядит дешевле. Но давайте без розовых очков.
Свой вариант выглядит дешевле. Но давайте без розовых очков.

Что мы пробовали и где обожглись

Попытка №1. «Давайте всё на GitHub Actions» Удобно. YAML пишется быстро. Marketplace полон готовых actions. Первые полгода всё было прекрасно. Потом репозитории выросли, тесты стали тяжелее, а параллельных jobs захотелось больше. Счёт начал кусаться. Особенно больно, когда кто-то случайно запускал полный matrix на каждый пуш в feature-ветку. Один раз за выходные набежало на 52 тысячи. Тимлид сказал фразу, которую я запомнил: «Ну и запросы у вас — сказала база данных и повисла». Только вместо базы данных был биллинг GitHub.

Попытка №2. GitLab.com Переехали частью репозиториев. Shared runners оказались медленнее, чем хотелось. Особенно на Flutter-сборках. Плюс лимиты на минуты. Пришлось брать платный план. Стало чуть дешевле GitHub, но не кардинально. И всё равно чужая инфраструктура.

Попытка №3. Свой GitLab + runners Подняли GitLab CE на Proxmox. Четыре runner-а: два под Linux, один под Windows (для одного легаси-проекта), один «тяжёлый» с большим количеством CPU. Скорость выросла. Стоимость железа + электричества + амортизации вышла около 14–15 тысяч в месяц. Плюс примерно 8–10 часов админа в месяц на поддержку. И вот тут началось самое интересное.

Где свой CI/CD реально выигрывает

  1. Предсказуемая стоимость.Ты платишь за железо и электричество. Не за минуты. Не за то, что кто-то случайно оставил debug-пайплайн. Просто фиксированная сумма.
  2. Скорость на тяжёлых задачах.Когда у тебя свой runner с 16 ядрами и 64 ГБ памяти — Flutter-сборка или большой Go-тест проходит заметно быстрее, чем на shared. Особенно если кэши настроены нормально.
  3. Полный контроль над окружением.Нужны специфические зависимости? Кастомный Docker-образ? Доступ к внутренним ресурсам без танцев с VPN? Пожалуйста. Никаких «у нас это не поддерживается».
  4. Нет очередей в пиковые часы.Когда вся компания одновременно пушит в пятницу вечером — свой runner не встаёт в очередь за чужими джобами.

Где свой CI/CD больно бьёт

Самый большой скрытый расход — время. Обновления GitLab. Обновления runners. Когда после обновления Docker вдруг перестаёт резолвить DNS. Когда заканчивается место на диске с артефактами. Когда сертификат истекает и всё падает в субботу утром.

Один раз runner «тихо» умер в воскресенье. Мы узнали об этом только в понедельник, когда половина пайплайнов висела в pending. Классика: «Под лежачий камень мы всегда успеем».

Плюс безопасность. Свой GitLab — это ещё одна точка, которую надо патчить, бэкапить и мониторить. Мы для этого используем связку Uptime Kuma + алерты в Telegram. Если интересно, как быстро это поднимается — вот статья про Uptime Kuma.

Ещё один момент: кэши и артефакты. На своём железе они занимают место. И довольно быстро. Пришлось отдельно настраивать ротацию и чистку. Без этого диск заканчивается быстрее, чем зарплата до зарплаты.

Что в итоге оставили

Сейчас у нас гибрид:

  • Лёгкие и средние пайплайны — на своём GitLab.
  • Самые тяжёлые и редкие (полная матрица, долгие интеграционные тесты) — иногда уходят в GitHub Actions, чтобы не держать лишнее железо.
  • Критичные репозитории полностью на своём.

Runners крутятся в LXC-контейнерах на Proxmox. Для управления конфигурацией используем Ansible — один раз настроил playbook и больше не вспоминаешь, как вручную править конфиги. Если ещё не пробовали — вот разбор Ansible для сисадмина.

Docker-образы для сборок храним в своём registry. Обновления контейнеров частично автоматизировали через Watchtower (для некритичных) и ручной контроль для продакшен-связанных. Сравнение подходов можно посмотреть здесь.

Неожиданный результат

Самое смешное: после перехода на свой CI скорость разработки почти не выросла. Зато сильно упало количество «а что это у нас пайплайн опять в очереди» и «кто опять сожрал лимит минут».

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

И ещё один момент, о котором редко говорят: когда CI свой — ты начинаешь относиться к пайплайнам бережнее. Меньше запускаешь «на всякий случай». Меньше оставляешь debug-флаги. Потому что понимаешь: это твоё железо, а не бездонный облачный карман.

Что бы я сделал иначе

Если бы начинал сейчас с нуля — сразу бы поднимал свой GitLab (или даже Gitea + Woodpecker/Drone) на нормальном железе. И сразу бы закладывал мониторинг, бэкапы и ротацию артефактов. А не «сначала на облаке, а потом как-нибудь переедем».

Облачный CI отлично подходит, когда репозиториев мало, команда маленькая и бюджет позволяет не думать. Как только появляется 10+ активных репозиториев и регулярные тяжёлые сборки — цифры начинают говорить сами за себя.

Главный вывод

Свой CI/CD на 15 репозиториях в 2026 году выходит дешевле облачного примерно в 1,5–2 раза, если считать только прямые расходы. Если добавить время админа и риски — разница уменьшается, но всё равно остаётся в плюсе при грамотной настройке.

Облако удобнее на старте. Своё — выгоднее, когда объём уже понятен и не хочется каждый месяц удивляться счёту.

Мы не стали фанатиками «только self-hosted». Просто посчитали и выбрали то, что меньше бьёт по карману и нервам.

А у вас как? Сколько репозиториев и какой вариант сейчас живёт? Особенно интересно услышать тех, кто уже год+ на своём CI — какие грабли нашли.

Больше про инфраструктуру без воды — в блоге IT-Аптека и в Telegram-канале.