Ну и что делать, если в вашей компании — несколько тысяч программистов, сотни команд и десятки стримов? И вам нужно… Нет, не нужно — жизненно необходимо, чтобы они все работали как единый, отлаженный, настроенный механизм.

Разработка в Газпромбанке — это процесс, в котором задействовано более 3500 инженеров, пять департаментов, 59 стримов и 200+ кросс-функциональных команд.

При этом был период, когда наши команды создавали ПО разрозненно, стандарта разработки не было, практики и технологии у всех свои. Велосипеды, как в анекдоте, были у всех, но ездили по-разному. Билды проходили тесты, которые не должны были пройти, и возвращались «на доработку» едва ли не перед запланированным релизом. Что же делать, как же быть?

Да. Нужен стандарт. И нужны автоматизированные средства поддержки стандарта.

Нам не подошли ни одни из существующих Quality Gates — мы сформировали собственный набор практик проверки качества продукта (билда, сборки — всего того, чему требуется многоуровневое тестирование). Теперь у нас выросшая в семь раз частота деплоев и шикарные фильтры, построенные на тестах.

Почему мы не купили готовое решение? Что сделали? Как? Расскажем.

Привет, Хабр! Меня зовут Евгений, я тимлид команды развития инженерных практик в Газпромбанке.

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

Мы внедряли Agile и переводили команды на Trunk Based Development с короткоживущими ветками, быстрыми мержами и непрерывной поставкой. Теоретически вместе с этим должно было прилететь счастье.

Но чёрта с два:

  • Команды саботировали тесты и спеки.

  • Не было готовых инструментов для кастомных Quality Gates.

  • Недостаточно экспертизы по контрактным тестам.

  • Legacy. Проблемы с Legacy никогда не меняются.

  • Внешние подрядчики, которых тяжело заставить что-то менять и меняться самим.

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

В результате мы создали свой стандарт и разработали для него свои Quality Gates.

Стандарт, чек-лист и Quality Gates

Мы начали с главного — стандарта разработки. Вместе с head-of-profession описали, что такое «нормальная разработка» в контексте ГПБ — от языков и тестирования до мониторинга. Далее — чек-лист, по которому команда могла проверить свой сервис перед выпуском.

Часть этого чек-листа мы проверяем автоматически через Quality Gates, встроенные в пайплайн. Эти гейты автоматически проверяют соблюдение практик на этапе CI/CD.

А дальше мы начали строить QGaaS — quality gate as service

Готовые решения для Quality Gates нас не устроили. Почему? Потому что.

Ладно, потому что:

  • Они слишком закостенелые или привязаны к одному инструменту.

  • У них нет нормального механизма кастомизации и масштабирования.

Нам же хотелось:

  • Решения «Platform agnostic» — отсутствия зависимости от инструмента CI/CD.

  • Асинхронных проверок без задержек в пайплайне.

  • Централизованного контроля над гейтами.

  • Возможности постоянно обновлять практики без риска что-то сломать.

  • Поддержки любых, каких мы сами придумаем, проверок.

  • Innersource-разработки: мы хотели, чтобы наши пользователи делали вклад в развитие системы.

Мы решили создать свои собственные QG. Так появился сервис QGaaS — расширяемый сервис, который принимает события из CI/CD, Bitbucket, Jira и прогоняет нужные проверки.

Как он устроен

Для команды всё просто — достаточно добавить два шага в пайплайн:

  1. QualityGateRunner — создаёт поставку (единицу релиза).

  2. QualityGateCheck — проверяет, прошла ли поставка нужные гейты.

А под капотом — архитектура с очередями, роутерами, воркерами и кэшем:

  1. CI отправляет информацию о сборке.

  2. QGaaS создаёт «поставку» — сущность с метаинформацией (версия, фичи, дата, инициатор).

  3. Воркеры запускают проверки: semver, sonar, спеки, healthchecks, контрактные тесты и другие.

  4. Результаты складываются в базу и кэш, они доступны через API или веб-интерфейс.

Всё это работает асинхронно. Проверки можно перезапустить. Новые практики можно внедрять без изменений в пайплайнах команд.

У нас три Quality-гейта:

  • QG1 — можно деплоиться на тестовый полигон.

  • QG2 — на препрод.

  • QG3 — на прод.

Если что-то не прошло — релиз дальше не поедет.

Что проверяет QGaaS уже сейчас:

  • SemVer артефакта и валидность манифеста сервиса.

  • Использование Feature toggles: живут до месяца, управляются централизованно через Unleash.

  • API-спеки (OpenAPI/AsyncAPI). Мы следуем принципу API First: сначала — спека, потом — код.

  • Контрактные тесты.

  • Healthchecks.

  • SonarQube.

  • SAST и другие проверки от команды appsec (в будущем вообще начнём запускать их в параллель и экономить этим 30% времени).

  • Соответствие чек-листу Стандарта разработки (пока что частично вручную).

Планируем автоматизировать генерацию кода по спекам, чтобы убрать «творчество» из сервисов и избавиться от контрактных тестов, которые могут занимать до 40% времени разработчика.

Теперь переходим к самому вкусному — результатам (а они впечатляют):

  • Cycle time (от постановки задачи до продакшена) упал с 45 до полутора дней.

  • Частота деплоев выросла в семь раз.

  • Инциденты на проде упали на 71%.

  • Собрано 4500 билдов, из них через QG1 прошло только 37% — то бишь 2500+ сборок было забраковано ещё до тестов: экономия времени QA — колоссальная.

У нас пять платформ, сотни команд и десятки тысяч релизов в год. Без средств контроля качества разработки всё это гарантированно развалилось бы. А QGaaS — это платформа, скомпилированная «по домашнему рецепту», дающая бешеные плюсы к качеству и стабильности.

В планах:

  • Проверка миграций схем БД.

  • Контроль практики Trunk Based Development по времени жизни веток.

  • Расширение системы метрик.

  • Подключение новых платформ к QGaaS.

  • Доведение покрытия чек-листа до 100% автоматизации.

  • Запуск универсального пайплайна с KotlinDSL: несколько переменных — и команда катится в прод.

Комментарии (4)


  1. boldape
    15.10.2025 00:23

    У статьи уже +12, а я единственный комментатор и то моя мотивация не связана с контентом. Вопросы:

    • А в чем польза комьюнити если нет никаких деталей, что конкретно и как работает? И самое главное как повторить успех?

    • Это реклама банка как место работы?, но тогда не хватает ссылки на открытые вакансии и лозунга - а приходите к нам работать.

    • Это личное КПИ для продвижения по карьерной лестнице? Ну дело конечно хорошее, но контент слабоват.


    1. AleksSharkov
      15.10.2025 00:23

      Согласен полностью, успешный успех теперь и в хабре


      1. LeiDruid Автор
        15.10.2025 00:23

        Чуть ниже ответил. Если у вас есть вопросы, готов обсудить в рамках NDA


    1. LeiDruid Автор
      15.10.2025 00:23

      Вот такой схемой мы пользовались внутри, чтобы отписывать друг другу. Как выглядит flow:

      1. Мы ловим события из наших инструментов (ci/cd конвейер, git, и другие системы) в receiver. Они складываются в отдельную inbox-очередь.

      2. Далее message router'ы (MR) (каждый(или несколько) MR заточен под свои сообщения) забирают предназначенные им сообщения из inbox-очереди, обрабатывают их, обогащая необходимыми данными, если нужно, и отправляют либо в очередь своего воркера.

      3. Результат обработки воркерами (именно на этом этапе мы проверяем код) складывается в outbox-очередь для обработки result процессорами.

      4. Result-процессоры (RP) как и в случае с MR, обрабатывают каждый свой тип сообщения.

      5. Результаты складываются в кэш и базу, откуда их потребляют пользователи в web-интерфейсе сервиса или степ проверки результата из конвейера.

      6. Также поддерживается обработка событий для внешних систем — мы предусмотрели отправку данных в другие системы (они могут поступить к нам со своими MR и RP).


      Что касается остальных замечаний:

      1. Вы правы, наверное, нам стоило раскрыть больше технических деталей сразу, но корпоративный блог - штука форматная, искали компромисс между технической статьей и сторителлингом.

      2. Если говорить о публикации в блоге как рекламе банка, то и да, и нет одновременно. Наверное, в целом, это, конечно, влияет на HR-бренд, но не прямо. У нас хорошо, но ссылкой не поделюсь, просто не моя компетенция.

      3. Никаких личных KPI на этот счет у нас нет, только на продукты :)

      Если что-то ещё интересно, спрашивайте, расскажу подробнее. Конечно, в рамках NDA.