Ну и что делать, если в вашей компании — несколько тысяч программистов, сотни команд и десятки стримов? И вам нужно… Нет, не нужно — жизненно необходимо, чтобы они все работали как единый, отлаженный, настроенный механизм.
Разработка в Газпромбанке — это процесс, в котором задействовано более 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 и прогоняет нужные проверки.
Как он устроен
Для команды всё просто — достаточно добавить два шага в пайплайн:
QualityGateRunner — создаёт поставку (единицу релиза).
QualityGateCheck — проверяет, прошла ли поставка нужные гейты.
А под капотом — архитектура с очередями, роутерами, воркерами и кэшем:
CI отправляет информацию о сборке.
QGaaS создаёт «поставку» — сущность с метаинформацией (версия, фичи, дата, инициатор).
Воркеры запускают проверки: semver, sonar, спеки, healthchecks, контрактные тесты и другие.
Результаты складываются в базу и кэш, они доступны через 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: несколько переменных — и команда катится в прод.

boldape
У статьи уже +12, а я единственный комментатор и то моя мотивация не связана с контентом. Вопросы:
А в чем польза комьюнити если нет никаких деталей, что конкретно и как работает? И самое главное как повторить успех?
Это реклама банка как место работы?, но тогда не хватает ссылки на открытые вакансии и лозунга - а приходите к нам работать.
Это личное КПИ для продвижения по карьерной лестнице? Ну дело конечно хорошее, но контент слабоват.
AleksSharkov
Согласен полностью, успешный успех теперь и в хабре
LeiDruid Автор
Чуть ниже ответил. Если у вас есть вопросы, готов обсудить в рамках NDA
LeiDruid Автор
Вот такой схемой мы пользовались внутри, чтобы отписывать друг другу. Как выглядит flow:
Мы ловим события из наших инструментов (ci/cd конвейер, git, и другие системы) в receiver. Они складываются в отдельную inbox-очередь.
Далее message router'ы (MR) (каждый(или несколько) MR заточен под свои сообщения) забирают предназначенные им сообщения из inbox-очереди, обрабатывают их, обогащая необходимыми данными, если нужно, и отправляют либо в очередь своего воркера.
Результат обработки воркерами (именно на этом этапе мы проверяем код) складывается в outbox-очередь для обработки result процессорами.
Result-процессоры (RP) как и в случае с MR, обрабатывают каждый свой тип сообщения.
Результаты складываются в кэш и базу, откуда их потребляют пользователи в web-интерфейсе сервиса или степ проверки результата из конвейера.
Также поддерживается обработка событий для внешних систем — мы предусмотрели отправку данных в другие системы (они могут поступить к нам со своими MR и RP).
Что касается остальных замечаний:
Вы правы, наверное, нам стоило раскрыть больше технических деталей сразу, но корпоративный блог - штука форматная, искали компромисс между технической статьей и сторителлингом.
Если говорить о публикации в блоге как рекламе банка, то и да, и нет одновременно. Наверное, в целом, это, конечно, влияет на HR-бренд, но не прямо. У нас хорошо, но ссылкой не поделюсь, просто не моя компетенция.
Никаких личных KPI на этот счет у нас нет, только на продукты :)
Если что-то ещё интересно, спрашивайте, расскажу подробнее. Конечно, в рамках NDA.