Настройка CI/CD — это сборка конвейера, который на каждый коммит сам собирает код, прогоняет тесты, формирует артефакт и доставляет его в нужное окружение без ручных действий разработчика. Короткий ответ: работа состоит из пяти решений — где живёт код и чем запускается пайплайн, что считается артефактом, какие проверки блокируют слияние в основную ветку, как разделены окружения и как выдаются доступы к серверам и облаку. Всё остальное (кэш, матрицы сборки, параллельные задачи) — оптимизация уже после того, как эти пять решений приняты. Ниже — как устроен пайплайн в GitLab CI и GitHub Actions, что меняется в 2026 году в тарифах платформ, сколько стоит работа в Украине, какими метриками измерять результат и по какому чек-листу принимать её у подрядчика.
Настройка CI/CD: короткий ответ
Если свести к практическому минимуму, заказывать нужно не «внедрение DevOps», а конкретный результат: изменение в репозитории доезжает до продакшена предсказуемо, а сломанное изменение не доезжает вовсе. Проверяемый минимум выглядит так:
- Пайплайн запускается автоматически на пуш и на merge request, а не по просьбе разработчика в чате.
- Сборка воспроизводима: один и тот же коммит даёт один и тот же артефакт — контейнер, архив или бандл со статикой.
- Тесты и линтеры — обязательное условие слияния; упавшая проверка физически не пускает код в основную ветку.
- Деплой идёт в отдельные окружения (тестовое и боевое), а доступ к боевому выдаётся отдельно и не лежит в репозитории.
- Откат — это переключение на предыдущий артефакт за минуты, а не повторная сборка старого коммита.
Дальше разберём каждый пункт по отдельности — и то, что обычно остаётся за рамками договора: кто отвечает за падение пайплайна ночью, сколько стоит минута сборки и что считается браком при приёмке. Общая картина услуги и её границы с администрированием серверов разобраны в отдельном материале про DevOps-услуги — это первая часть серии, здесь речь только о конвейере.
Пять слоёв, из которых состоит пайплайн
Пайплайн почти всегда собирается из одних и тех же слоёв. Разница между проектами — в том, какие из них настраивают по-настоящему, а какие имитируют. Настройка CI/CD как услуга в каталоге DevOps-направления обычно покрывает все пять, но проверять надо каждый.
- Триггер и оркестратор. Событие (пуш, merge request, тег, расписание) запускает задачу на раннере. Здесь же решается, какие ветки вообще имеют право запускать деплой.
- Сборка. Установка зависимостей, компиляция, сборка контейнерного образа. Ключевой признак качества — сборка идёт в чистом окружении и не тянет ничего с машины разработчика.
- Проверки. Модульные и интеграционные тесты, линтеры, сканер уязвимостей зависимостей, проверка миграций. Это слой, который чаще всего сокращают «чтобы быстрее», и именно он потом стоит дороже всего.
- Доставка. Публикация артефакта в реестр и развёртывание в окружения. Хорошая практика — собирать артефакт один раз и продвигать его между стендами, а не пересобирать на каждом шаге.
- Наблюдаемость. Статус пайплайна, время стадий, уведомления, следы деплоя в логах и привязка релиза к коммиту. Без этого слоя разбор инцидента превращается в археологию.
CI и CD: три режима, которые путают в договоре
Аббревиатура одна, а режимов три, и они означают разный объём работы и разный уровень риска. Continuous integration — код автоматически собирается и проверяется при каждом изменении. Continuous delivery — к этому добавляется автоматическая доставка в тестовое окружение, но выпуск на прод остаётся ручным решением человека. Continuous deployment — на прод уходит всё, что прошло проверки, без участия человека. Подрядчик может написать в предложении «настроим CI/CD», имея в виду только первый режим, поэтому в договоре фиксировать надо именно режим, а не аббревиатуру.
- CI без CD — разумный старт для проекта, где продакшен пока один и обновляется редко.
- Continuous delivery — рабочий вариант для большинства украинских команд: автоматика доводит до тестового стенда, на боевой выпускает ответственный.
- Continuous deployment — оправдан, когда есть быстрый откат, хорошее покрытие тестами и наблюдаемость. Без этих трёх условий он превращает мелкую ошибку в инцидент для всех пользователей сразу.
Как это выглядит в GitLab CI и GitHub Actions

Два самых распространённых инструмента устроены похоже, но по-разному описывают работу. В GitLab конвейер задаётся файлом в корне репозитория: стадии идут последовательно, задачи внутри стадии выполняются параллельно, а ключевое слово для зависимостей между задачами позволяет запускать часть работы раньше, не дожидаясь конца стадии. Условия запуска задаются правилами на уровне задачи — так деплой на прод привязывают к тегу или к защищённой ветке. Раннеры могут быть общими или своими, в том числе внутри вашей инфраструктуры.
В GitHub Actions конвейер называется workflow и лежит отдельным файлом в каталоге служебных описаний. Внутри — задачи и шаги, шаг может быть готовым действием из маркетплейса или обычной командой оболочки. Плюс такого подхода — низкий порог входа и огромная библиотека готовых шагов; минус — тот же маркетплейс: чужое действие получает доступ к вашему коду и секретам. Практическое правило: сторонние действия закреплять по конкретному коммиту, а не по плавающему тегу, и держать их минимальный набор.
Для команды выбор обычно диктуется тем, где уже живёт код и задачи. Переезд ради пайплайна почти никогда не окупается: оба инструмента умеют одно и то же, разница — в привычках и в том, насколько глубоко нужно интегрироваться с трекером задач и реестром образов.
Окружения и стратегии выпуска
Отдельные окружения — не формальность, а способ поймать ошибку до пользователей. Рабочая схема для среднего проекта: локальная среда разработчика, общий тестовый стенд, предпродакшен, максимально похожий на боевой, и продакшен. Чем ближе предпродакшен к бою по версиям языка, базе и конфигурации, тем меньше сюрпризов в момент выпуска — но и тем дороже его содержать, поэтому для небольших проектов стенд часто совмещают с тестовым.

- Blue-green: два одинаковых окружения, трафик переключается между ними. Откат — обратное переключение, почти мгновенно.
- Canary: новая версия получает небольшую долю трафика, остальное идёт на старую. Требует маршрутизации и метрик по версиям.
- Feature flags: код выкладывается, но функция включается флагом. Позволяет отделить выпуск от включения и тестировать на реальных пользователях.
- Миграции баз данных по схеме «сначала расширить, потом переключить, потом удалить»: изменения, ломающие старую версию приложения, выкладываются в два-три релиза, иначе откат кода без отката схемы невозможен.
Стратегию выбирают не по моде, а по цене ошибки. Для внутреннего сервиса достаточно обычного деплоя с быстрым откатом; для платёжного контура или системы, где простой стоит денег, blue-green и canary перестают быть избыточными. В договоре это стоит зафиксировать отдельной строкой: иначе подрядчик сделает простой деплой, а заказчик будет ждать переключения трафика.
Секреты, доступы и цепочка поставки
Самая частая проблема после внедрения — не сломанная сборка, а ключи. Долгоживущий токен облака, положенный в переменные репозитория, живёт там годами, доступен всем, у кого есть права на запись, и попадает в форки при неаккуратной настройке. Правильное решение для 2026 года — федерация удостоверений: GitHub Actions умеет получать доступ к облачным ресурсам по OpenID Connect без хранения долгоживущих секретов, а провайдер выдаёт короткоживущий токен только для конкретного репозитория, ветки и окружения.
- Секреты хранятся в хранилище платформы по окружениям, а не в файлах репозитория; у боевых — отдельный доступ и журнал использования.
- Права деплой-ключа минимальны: только то, что нужно для выкладки, без административных ролей в облаке.
- Основная ветка защищена: слияние только через merge request с обязательными проверками, прямой пуш запрещён.
- Сторонние действия и образы закреплены по хешу коммита; обновление — отдельной задачей, а не «само подтянется».
- Включён скан зависимостей и секретов в самом пайплайне: утёкший токен должен ловиться до попадания в основную ветку.
Отдельный вопрос — цепочка поставки. Если продукт продаётся корпоративным клиентам или работает с персональными данными, заказчику всё чаще нужны подтверждения происхождения артефакта (уровни SLSA) и перечень зависимостей сборки. Это не обязательный минимум для небольшого проекта, но если такие требования появятся позже, переделывать пайплайн дороже, чем сразу предусмотреть подпись и хранение сведений о сборке.
Кэш, раннеры и счёт за минуты

Пайплайн стоит денег двумя способами: временем разработчика и оплатой минут сборки. На бесплатном плане GitHub приватные репозитории получают 2 000 минут в месяц, на Pro и Team — 3 000, на Enterprise Cloud — 50 000. Публичные репозитории на стандартных раннерах остаются бесплатными. Кэш зависимостей и артефакты имеют отдельные лимиты хранения — 10 ГБ кэша на репозиторий. С 1 января 2026 года GitHub снизил цены hosted-раннеров до 39 % в зависимости от типа машины. Анонсированную плату за использование собственных раннеров компания отложила после обратной связи сообщества. Значит, при выборе «свои или облачные» считать надо по актуальному тарифу, а не по прошлогодним статьям.
В GitLab на бесплатном плане — 400 минут вычислений в месяц и до пяти пользователей в группе, на Premium ($29 за пользователя в месяц при годовой оплате) — 10 000 минут. Для команды из пяти человек с активными мержами бесплатной квоты обычно хватает на две-три недели, дальше начинается доплата за минуты.
Свои раннеры на сервере экономят минуты при больших объёмах, но добавляют обслуживание: обновления, чистка диска, изоляция задач друг от друга. Если сборки тяжёлые, а инфраструктура уже есть, свои раннеры на серверах под проект окупаются; если инфраструктуры нет, дешевле начать с облачных, а собственные развернуть на Google Cloud, когда счёт за минуты станет заметной строкой бюджета.
Кэш — второй по важности рычаг. Кэширование зависимостей и слоёв контейнерной сборки сокращает типичный прогон с десятков минут до нескольких; но кэш надо правильно инвалидировать, иначе он начнёт отдавать устаревшие пакеты и «зелёные» тесты на старом коде. Признак грамотной настройки — пайплайн не длиннее 10–15 минут на типовой коммит и предсказуемое время у самых тяжёлых задач.
Откат, миграции и восстановление после сбоя
Настройка CI/CD без продуманного отката — это автоматизация риска. Правильная схема: артефакт собирается один раз, получает неизменяемый тег и продвигается между окружениями; откат — переключение на предыдущий тег. Пересборка старого коммита «на месте» опасна: зависимости могли обновиться, и вы получите не ту версию, которая работала вчера. Если в проекте есть база данных, к этому добавляется правило обратной совместимости миграций: код старой версии должен работать со схемой новой версии хотя бы один релиз.
Второй элемент — процедура на случай, когда деплой уже прошёл и ошибка видна в бою. Она должна быть записана: кто принимает решение об откате, какая команда его выполняет, сколько это занимает и как проверяется, что старая версия действительно вернулась. DORA называет этот показатель временем восстановления после неудачного деплоя и включает его в число базовых метрик доставки — именно потому, что скорость выпуска без скорости восстановления только увеличивает ущерб.

Метрики: пять показателей DORA
Спорить о результате «на ощущениях» бессмысленно — есть набор показателей, который DORA использует в исследованиях. В обновлении от 5 января 2026 года их пять: три показывают пропускную способность, две — стабильность. Важно, что показатель MTTR из старых материалов заменён на время восстановления после неудачного деплоя, а пятым стала доля незапланированных выпусков. Считать их удобно там, где данные о выпусках и инцидентах уже сведены в одну отчётность — так же, как устроена сквозная аналитика по рекламе и продажам.
- Время от коммита до продакшена (change lead time) — сколько проходит от слияния до работающей версии.
- Частота деплоя (deployment frequency) — сколько выпусков в неделю или день и какой между ними интервал.
- Время восстановления после неудачного деплоя (failed deployment recovery time) — от сбоя до возврата к рабочему состоянию.
- Доля неудачных деплоев (change fail rate) — какая часть выпусков требует немедленного вмешательства: откат или горячая правка.
- Доля переделок (deployment rework rate) — какая часть выпусков не планировалась, а была реакцией на инцидент в продакшене.
Практический смысл для заказчика: до внедрения зафиксируйте базовые значения, через месяц после — сравните. Если время от коммита до продакшена не изменилось, а доля переделок выросла, пайплайн настроен формально. Обратная ситуация тоже сигнал: выпуски участились, но время восстановления выросло — значит, автоматизировали доставку, не автоматизировав проверки.
Сколько стоит настройка CI/CD в Украине в 2026 году
Открытых прайсов именно на разовую настройку пайплайна на рынке мало: подрядчики продают её либо как часть DevOps-услуги, либо по часам. Поэтому смету собирают из трёх слагаемых — работа инженера, платформа и дальнейшее сопровождение. Ориентиры, которые можно проверить по открытым источникам на 28.10.2026:

- Managed-сервис с готовым CI/CD: у украинского провайдера Tucha в пакете TuchaKube первичная настройка процессов сборки, тестирования, контейнеризации и публикации — 100 € разово, дополнительные настройки — 100 € в час, инфраструктурная часть — 602 € в месяц.
- Команда в штате: по летнему зарплатному отчёту DOU 2026 медиана DevOps Middle — 2 900 $, Senior — 5 100 $, Team Lead — 5 500 $, SRE — 3 500 $ в месяц до налогов.
- Платформы: GitHub — от 0 до 50 000 включённых минут в зависимости от плана, GitLab Premium — 29 $ за пользователя в месяц при годовой оплате.
- Сопровождение пайплайна после сдачи — обычно 10–20 % стоимости внедрения в месяц; точная смета зависит от сложности проекта и числа окружений.
Из чего складывается стоимость работы: число репозиториев и сервисов, наличие контейнеров, количество окружений, сложность тестов (модульные дешевле, end-to-end с браузером дороже и медленнее), требования к безопасности и наличие Kubernetes. Проект на одном репозитории с тестами и двумя окружениями и продукт из шести микросервисов с GitOps — это разная работа, хотя в обоих случаях в договоре будет написано «CI/CD».
Экономия, которую обычно обещают, тоже требует проверки. Автоматизация не уменьшает объём работы, а переносит её: вместо ручного деплоя команда тратит время на поддержку пайплайна, разбор упавших тестов и обновление зависимостей. Выигрыш появляется там, где выпусков много и каждое ручное действие повторялось десятки раз в месяц.
Этапы работы и сроки
Адекватный подрядчик начинает не с YAML, а с инвентаризации. Порядок, который снижает риск переделок:
- Аудит текущего состояния: репозитории, ветки, ручные шаги, окружения, существующие секреты и доступы. Обычно 2–4 дня.
- Проектирование: схема стадий, что блокирует слияние, где хранятся артефакты и секреты, кто имеет доступ к продакшену. 1–3 дня.
- Пилот на одном сервисе: полный пайплайн от пуша до тестового стенда, с прогоном на реальном коде. 3–7 дней.
- Тиражирование на остальные репозитории и добавление деплоя на прод. 1–3 недели в зависимости от числа сервисов.
- Передача: документация, схема пайплайна, инструкция по откату, обучение команды на живом примере.
- Стабилизация: первые две недели после сдачи подрядчик разбирает падения и правит ложные срабатывания — этот этап стоит прописать в договоре.
Типичный срок для одного сервиса — от двух до четырёх недель, для продукта из нескольких репозиториев — полтора-два месяца. Если в предложении стоит «настроим за два дня», уточняйте, что именно войдёт: за два дня делается сборка и тесты, но не деплой с откатом и не разделение доступов.
Типичные ошибки заказчиков
- Покупать «CI/CD» без указания режима: в итоге настраивают только сборку и тесты, а деплой остаётся ручным.
- Не давать доступ к репозиторию и инфраструктуре на время работ — подрядчик строит пайплайн вслепую, а потом переделывает.
- Требовать зелёный пайплайн при отсутствии тестов: проверки начинают пропускать принудительно, и защита исчезает.
- Хранить боевые секреты в переменных репозитория и выдавать всем разработчикам права на прод.
- Не фиксировать, кто отвечает за падение пайплайна после сдачи: обычно выясняется, что никто.
- Экономить на предпродакшене, а потом ловить различия конфигурации уже в бою.
- Забывать про миграции базы: откат кода без обратной совместимости схемы ломает данные.
Как принять работу: чек-лист из десяти пунктов
Приёмка — не просмотр файла конфигурации, а прогон сценариев на живом проекте. Ниже — минимум, который проверяется за один рабочий день вместе с подрядчиком.
- Сломанный тест в отдельной ветке действительно блокирует слияние — проверяется намеренной ошибкой.
- Новый коммит в основную ветку автоматически доезжает до тестового стенда без ручных команд.
- Деплой на прод требует явного подтверждения или защищённого тега, а не происходит из любой ветки.
- Секреты не видны в логах пайплайна и не лежат в репозитории; проверьте историю коммитов и вывод задач.
- Откат выполнен на практике: подрядчик показывает возврат к предыдущей версии и время, за которое это происходит.
- Артефакт имеет неизменяемый тег и совпадает с коммитом в репозитории.
- Пайплайн типового коммита укладывается в согласованное время, тяжёлые задачи не блокируют быстрые проверки.
- Уведомления о падении приходят туда, где команда их читает, а не в пустой канал.
- Есть документация: схема стадий, переменные, порядок отката и контакты ответственных.
- Доступы оформлены на роли заказчика, а не на личный аккаунт подрядчика; при расторжении договора ничего не отваливается.
Если проект уже живёт, полезно начать с независимой проверки текущего состояния — такую работу закрывает аудит проекта: он показывает, какие шаги до сих пор ручные, где хранятся секреты и что сломается при первом же серьёзном релизе.

Восемь вопросов подрядчику
- Какой режим вы настроите: интеграция, доставка или полный автоматический выпуск?
- Что именно блокирует слияние в основную ветку и сколько это занимает по времени?
- Где будут храниться секреты и как устроен доступ к продакшену?
- Как выполняется откат и сколько он занимает в реальности, а не в презентации?
- Что будет с пайплайном при обновлении версии языка или базового образа?
- Кто отвечает за падения в первые две недели после сдачи?
- Как вы передаёте знания: документация, обучение или только созвон?
- Что входит в сопровождение и по какой ставке считаются доработки?
Когда CI/CD не нужен
Честная граница: автоматизация окупается частотой. Если продукт обновляется раз в квартал, релиз сопровождается ручной проверкой и участвует один разработчик, полноценный пайплайн с окружениями и стратегиями выпуска принесёт меньше, чем стоит его поддержка. В такой ситуации разумный минимум — автоматические тесты и скрипт сборки, запускаемый вручную.
- Проект на паузе или в поддержке без активной разработки.
- Нет тестов и нет ресурсов их писать — сначала тесты, потом автоматический деплой.
- Один сервер и один разработчик, выпуски редкие: хватит скрипта, резервной копии и понятной схемы обслуживания серверов.
- Регуляторные требования запрещают автоматический выпуск без ручного подтверждения — тогда настраивают доставку, а не деплой.
Обратная ситуация встречается чаще: команда уже выпускает ежедневно, но руками, по инструкции в вики, и каждый релиз — стресс. Тогда настройка CI/CD перестаёт быть улучшением и становится устранением узкого места, а сроки окупаемости считаются в сэкономленных часах на релиз.
Итог
Настройка CI/CD — это пять решений и один критерий приёмки: изменение доезжает до продакшена без ручных действий, а сломанное изменение не доезжает. Инструмент вторичен: GitLab CI и GitHub Actions закрывают задачу одинаково. Важнее, что зафиксировано в договоре — режим выпуска, работающий откат, раздельные доступы и сроки стабилизации. Если нужен пайплайн под конкретный стек и инфраструктуру, включая нестандартные интеграции и внутренние сервисы, задачу разбирают отдельно — обсудить её можно на странице заказных решений.
Частые вопросы
Чем CI отличается от CD?
CI автоматически собирает и проверяет каждое изменение. CD добавляет автоматическую доставку: в режиме delivery — до тестового стенда с ручным выпуском на прод, в режиме deployment — сразу на прод.
Сколько времени занимает настройка CI/CD?
Для одного сервиса — обычно 2–4 недели с учётом аудита и стабилизации. Для продукта из нескольких репозиториев — 1,5–2 месяца. Сборка и тесты настраиваются за дни, деплой с откатом и разделением доступов — дольше.
Можно ли настроить CI/CD без тестов?
Технически да, но пайплайн будет проверять только то, что код компилируется. Минимальный набор — линтер, модульные тесты и проверка сборки образа; без них автоматический деплой просто быстрее доставляет ошибки.
Что дешевле: GitHub Actions или GitLab CI?
На малых объёмах обе платформы укладываются в бесплатные квоты: 2 000 минут в месяц на GitHub для приватных репозиториев и 400 минут на бесплатном GitLab. Дальше считают по числу минут и пользователей: GitLab Premium — 29 $ за пользователя в месяц.
Нужен ли Kubernetes для CI/CD?
Нет. Пайплайн работает с любым способом доставки: виртуальная машина, контейнеры на одном сервере, PaaS. Kubernetes нужен, когда сервисов много и требуется оркестрация, и тогда добавляется GitOps-подход.
Как хранить секреты в пайплайне?
В хранилище секретов платформы по окружениям с ограниченным доступом. Для облаков правильнее федерация удостоверений по OpenID Connect: пайплайн получает короткоживущий токен вместо постоянного ключа.
Что такое откат деплоя и как он работает?
Это возврат к предыдущей рабочей версии. Правильная реализация — переключение на ранее собранный и проверенный артефакт с неизменяемым тегом, а не повторная сборка старого коммита.
Что случится, если пайплайн упадёт ночью?
Ничего, если настроены уведомления и ответственный. Пайплайн останавливается на упавшей стадии, код в продакшен не попадает. Проблема возникает, когда уведомления идут в нечитаемый канал — это проверяется при приёмке.
Сколько стоит настройка CI/CD в Украине?
Смета складывается из часов инженера, тарифа платформы и сопровождения. Ориентиры на октябрь 2026: managed-настройка у провайдера — 100 € разово и 100 € в час за доработки, медиана зарплаты DevOps Middle по DOU — 2 900 $ в месяц. Точная сумма зависит от сложности проекта.
Нужен ли отдельный инженер для поддержки пайплайна?
На небольшом проекте — нет, достаточно 10–20 % времени одного разработчика. Отдельная роль появляется, когда сервисов много, есть Kubernetes и несколько окружений.
Можно ли перенести пайплайн с Jenkins на GitHub Actions?
Да, и это частая задача. Перенос делают по одному сервису, сохраняя логику стадий: сначала сборка и тесты, затем деплой. Старый пайплайн держат рабочим до подтверждения нового.
Как измерить, что настройка CI/CD дала результат?
По пяти метрикам DORA: время от коммита до продакшена, частота деплоя, время восстановления после неудачного выпуска, доля неудачных деплоев и доля переделок. Базовые значения фиксируют до начала работ.
Что входит в сопровождение пайплайна после сдачи?
Обновление зависимостей и версий раннеров, разбор падений, правка ложных срабатываний тестов, добавление новых стадий. Обычно это 10–20 % стоимости внедрения в месяц.
Можно ли настроить CI/CD, если код на сервере без репозитория?
Сначала код переносят в систему контроля версий — без неё пайплайн невозможен. Это отдельный этап работы, и его стоит закладывать в смету.
Нужен пайплайн под ваш стек? Обсудим задачу и посчитаем смету