Свой CI/CD vs GitHub Actions / GitLab: цифры по скорости и стоимости на 15 репозиториях
В чате разработки всплывает сообщение от тимлида: «GitHub Actions опять сожрал 14 тысяч минут за выходные. Счёт на 38 тысяч рублей. Что делаем?»
Я открыл таблицу. Пятнадцать репозиториев. Две команды. Три разных стека. И вечный вопрос: свой 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 реально выигрывает
- Предсказуемая стоимость.Ты платишь за железо и электричество. Не за минуты. Не за то, что кто-то случайно оставил debug-пайплайн. Просто фиксированная сумма.
- Скорость на тяжёлых задачах.Когда у тебя свой runner с 16 ядрами и 64 ГБ памяти — Flutter-сборка или большой Go-тест проходит заметно быстрее, чем на shared. Особенно если кэши настроены нормально.
- Полный контроль над окружением.Нужны специфические зависимости? Кастомный Docker-образ? Доступ к внутренним ресурсам без танцев с VPN? Пожалуйста. Никаких «у нас это не поддерживается».
- Нет очередей в пиковые часы.Когда вся компания одновременно пушит в пятницу вечером — свой 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-канале.