Привет, Хабр! Сегодня мы часто говорим про разные тренды в разработке — ИИ‑агентов, тестирование на ранних стадиях, прослеживаемость изменений, автоматизацию пайплайнов… Все эти тренды звучат убедительно, пока не упираются в реальность: требования лежат в на общих дисках, схемы — в картинках, контракты — в разных версиях, а история изменений размазана по инструментам.
Что делать с этим?
Лев Немировский, руководитель направления по развитию инструментов внедрения ПСБ, рассказал, чем полезен в этом случае подход GitOps и о том, как и в каких случаях это может упростить жизнь команде.
Это не полный список трендов, о которых повсеместно говорят на ИТ‑конференциях и вообще в ИТ‑сообществе. Но для сегодняшней темы мы рассмотрим такие практики:

Все эти практики упираются в качество артефактов. Для работы ИИ нужны машиночитаемые артефакты. Для безопасности — полная прослеживаемость всех изменений. Для подхода Shift‑left Testing — возможность перенести тестирование на этап аналитики и проектирования. А для скорости — качественная автоматизация всего пайплайна.
На практике с этим возникают проблемы. Например, ИИ‑агент может открыть страницу на внутреннем портале, но такую проверку сложно сделать воспроизводимой: нет стабильного формата, понятного diff, версии и места, где проверка должна упасть автоматически. Мы не всегда можем отследить, кто, когда и зачем изменил тот или иной артефакт. Требования порой формулируются постфактум, уже после разработки. Даже при автоматизации и CI/CD находятся причины для ручных правок на проде в пятницу вечером.
И вот здесь на помощь приходит GitOps. В классическом смысле GitOps — это подход к управлению инфраструктурой и деплоем, где Git становится единственным источником истины. Но сам принцип шире: если артефакт можно описать как код, его можно проверять, версионировать, ревьюить и публиковать через пайплайн. Он позволяет нам хранить и версифицировать всё это:
машиночитаемые форматы (YAML, OpenAPI, Markdown, JSON);
полную историю изменений (кто, когда, что и зачем сделал);
валидацию на этапе коммита (shift‑left);
автоматические пайплайны (CI/CD для всего).
Главная идея GitOps проста: всё, что влияет на систему, должно жить как код.
С помощью Git мы можем автоматизировать практически всё и привести в нужное состояние наши артефакты.
Какие артефакты можно хранить в Git?
API‑контракты (OpenAPI/AsyncAPI);
модели данных (ER‑диаграммы в формате DBML, PlantML;
сценарии интеграции (sequence diagrams, BPMN);
бизнес‑правила (в формате YAML/Markdown);
текстовую документацию;
архитектуру.
Мы привыкли, что обычно разработка автоматизирована — лучше или хуже, но хотя бы с точки зрения самого кода. Однако тот пласт, который готовят аналитики (где‑то — бизнес‑аналитики, где‑то — системные аналитики, где‑то — тестирование совместно с разработкой), — он обычно за гранью автоматизации.
Это не ломает привычный цикл разработки, но добавляет к нему проверяемость: требования, контракты и схемы проходят тот же путь, что и код. То есть все этапы останутся: мы будем планировать, выяснять и выявлять требования. Но мы их будем описывать как код, а затем собирать из них артефакты, проводить тестирование, релизить. У нас по‑прежнему будет версионирование, деплой (в прод или во внутреннюю систему), а также этап эксплуатации системы.

Давайте я покажу несколько кейсов, как можно применить подход GitOps.
Контракты как код
Это, пожалуй, самый очевидный пример применения GitOps. Как это выглядит:
Аналитик создаёт AsyncAPI‑файл для нового сервиса;
кладёт его в Git и создаёт Merge Request;
-
автоматический пайплайн:
проверяет синтаксис (линтинг),
генерирует серверные и клиентские SDK,
разворачивает mock‑сервис для QA и фронтов,
публикует интерактивную документацию, например через Swagger UI или Redoc.
После апрува все артефакты становятся доступны команде.
Это важный момент: SDK, mock‑сервис и документация появляются только после ревью. Значит, команда работает не с «последней версией где‑то в чате», а с согласованным состоянием контракта.

Проверка реализации на соответствие контракту
Когда контракт лежит в Git, его можно использовать в CI для проверки реализации. Рассмотрим на примере: допустим, в контракте поле userId имеет тип string, а разработчик в коде возвращает int. Что можно предпринять?
С Git решение может быть таким:
Пайплайн автоматически сверяет код с контрактом.
Обнаруживает несоответствие типов.
Пайплайн падает и блокирует Merge Request.
Подход будет полезен даже тогда, когда нужно валидировать фрагменты кода из legacy на соответствие контракту.
Также проверка в пайплайне — хорошее решение для кода, написанного на не компилируемых языках. В статически типизированных языках часто достаточно сгенерированного SDK: если типы расходятся, приложение просто не соберётся. В динамических же языках SDK можно обойти, поэтому проверка в CI становится особенно полезной.
Контроль семантического версионирования
GitOps способен решить и ещё одну достаточно большую боль: версии приложений в целом версионировать достаточно просто, а вот артефакты — сложно. Особенно это играет роль в случае артефактов, для которых важно семантическое версионирование, — например, API‑контрактов.
Вот пример распространённой ситуации: аналитик поменял поле, изменил тип со string на int, но в контракте изменил только patch‑версию. Но если внедрён GitOps, с помощью инструментов, выявляющих такие обратно несовместимые изменения, можно ещё при автоматической проверке через MR подсветить ошибку до того, как контракт попадёт в работу, или остановить изменение до merge аналитику — чтобы изменил не patch‑версию, а мажорную.

Автоматическая публикация документации
Итак, кто‑то у нас уже работает в Git — например, разработчики и тестировщики, кого‑то — аналитиков и так далее — можно тоже научить. Но что делать с заказчиками? Наши внутренние и внешние клиенты едва ли сами пойдут в Git читать файлы в Markdown.
Значит, нужно создать для них читаемую документацию, а лучше — ещё и доступную по определённому URL‑адресу. И сейчас есть множество инструментов, которые помогут это сделать, — например, MkDocs, Docusaurus, GitBook.
Как это происходит:
Аналитик пишет документацию в Markdown в Git.
Пайплайн автоматически конвертирует Markdown в HTML и генерирует навигацию и поиск.
Документация публикуется на портале документации.
Все изменения видны в Git diff.
Кстати, я и сам использую этот подход для своего сайта: пишу его в Markdown, а тот генерируется в веб‑сайт.
Проверка безопасности
Git можно использовать для проверки безопасности. Мы берём контракт, в контракте появляется новый метод — DELETE /users/{id}, и мы автоматически проверяем:
есть ли описание авторизации;
прописаны ли роли и права;
указаны ли ошибки 401/403.
Если нет — MR блокируется.
Впрочем, при внедрении здесь можно столкнуться с проблемой, что у каждой команды есть свои правила, с которыми она работает. Поэтому проверки придётся писать. Но всё равно это не займёт много времени: в пилотном варианте такие проверки вполне реально собрать за пару недель, особенно если использовать ИИ для подготовки правил и тестовых примеров.
Валидация схем данных
Эта проверка проходит так: аналитик меняет ER‑диаграмму, на её основе генерируется SQL‑миграция, и пайплайн проверяет:
не теряются ли данные;
есть ли индексы и внешние ключи;
соответствуют ли названия таблиц и полей стандартам команды.
Реализовать это можно с помощью инструментов sqlfluff, скриптов с dry‑run на тестовой базе, pgTAP (это тесты для схем).
Обязательные описания коммитов
Если артефакты становятся кодом, то к ним должны применяться те же правила: понятные коммиты, связь с задачей и объяснение причины изменения.
В рамках пайплайна бывает дорого проводить много проверок: чем их больше, тем больше и времени занимает пайплайн. И тем больше циклов «запустили пайплайн — проверили — упал — вернулись, доработали — запушили — опять смотрим пайплайн». И вот тут ситуацию осложняет ещё одна проблема — обилие коммитов с одинаковыми наименованиями, которые появляются просто потому, что люди не понимают, какой коммит и куда писать.
Для решения этой проблемы можно ввести обязательные описания коммитов разработчиков и аналитиков, содержащие связь с задачей (например, номер задачи).
Это возможно с pre‑commit hook. Что он делает:
проверяет формат сообщения;
если нет ID задачи или описания — пуш отклоняется.
Контроль MR
С MR тоже часто встречается проблема: когда не описывают подробно, что изменили, и из‑за этого возникают несоответствия. Цепочка решения с помощью GitOps в этом случае может быть такой:
Аналитик заводит MR с новой спецификацией, но забывает описать, что поменялось.
Пайплайн проверяет поле description.
Если в поле пусто — merge невозможен.
А ещё можно добавить шаблоны MR: «что изменено», «зачем изменения», «как изменения повлияют на пользователя».

Обязательные ревью правил

Ещё одна частая неприятная ситуация — когда при совместной работе забывают уведомить остальных участников команды об изменениях. Например, аналитик сделал контракт, потом пришёл разработчик — что‑то поменял, но не оповестил остальных. И вот у других разработчиков, тестировщиков SDK генерируются, валидация проходит — ведь контракт изменён и у него корректный SDK.
Как избежать таких проблем? С помощью codeowners, где можно указать владельца файла или папки. При этом владельцем может быть один человек или команда — и тогда без её подтверждения ME в принципе не пройдёт. Так что в вышеописанной ситуации разработчик теперь тоже сможет менять контракты, сделанные аналитиком, но эти изменения должны верифицировать аналитик, техлид или команда, указанная в codeowners.
Но есть нюанс: не стоит назначать обязательных владельцев на всё подряд. Codeowners нужны там, где ошибка действительно дорого стоит: контракты, критичные бизнес‑правила, схемы данных, security‑требования. Иначе вы будете часто попадать в ситуации, когда тот, кто должен верифицировать изменения, отсутствует — в отпуске, недоступен — и у вас ни один MR не проходит.
Автоматическая генерация Changelog
Генерацию Changelog часто всё ещё делают вручную. Но если мы называем коммиты в соответствии с Conventional Commit, можно внедрить автогенерацию Changelog — для этого есть специальные инструменты.
Как происходит процесс генерации поэтапно:
При merge на прод анализируются коммиты;
группируются по типам: features, fixes, breaking changes и так далее;
-
формируются:
Changelog.md в репозитории,
Release notes в GitLab или GitHub,
уведомление в мессенджер.
Всё это генерируется за пару минут, и не нужно вручную писать все изменения, которые были сделаны. Для этого не нужна революция: достаточно договориться о формате коммитов и добавить генератор release notes в пайплайн.
Контроль языка и терминологии
Вы с таким тоже наверняка сталкивались — когда в документации пишут «клиент», «пользователь», даже «юзер», но всё это об одном и том же. И таких разночтений может быть сколько угодно.
Если с верификацией контрактов, YAML и подобными файлами немного проще — существуют специальные инструменты, которые их валидируют, — то что делать с огромным пластом обычного текста? Его тоже надо как‑то валидировать и приводить к единообразию терминологии.
Что можно предпринять с Git в данном случае? Использовать линтер для документации, который действует таким образом:
в репозитории есть глоссарий утверждённых терминов;
Vale или подобный линтер проверяет Markdown;
при использовании запрещённых слов пайплайн возвращает ошибку.
Конечно, здесь не обойтись без дополнительных расходов на поддержание файла в актуальном состоянии, но можно облегчить жизнь, интегрировав в процесс ИИ.
Шаблоны артефактов
Как это работает? Аналитик заводит новый контракт, а пайплайн автоматически проверяет:
есть ли обязательные разделы (описание, версии, примеры запросов/ответов);
есть ли тестовые примеры и так далее
Проще говоря, если мы храним шаблоны артефактов в Git, то можем типизировать все наши основные документы, контракты и генерировать их в рамках самого Git. У нас просто есть определённый пайплайн, где достаточно нажать кнопку — и нужный артефакт уже появился. Или даже целый проект. Мы можем писать только бизнес‑логику — и под ней уже будет подразумеваться не только код самого приложения, но документы, контракты и всё, что входит в этот сервис.
Syntetic monitoring (Синтетический мониторинг)
Более сложная ситуация — проверка прода уже на этапе эксплуатации. Даже при использовании автоматики есть риски, что где‑то что‑то не учли, что‑то не то попало в прод и так далее. И нужно валидировать, действительно ли на проде у нас то, что мы и планировали изначально, или есть какие‑то отклонения. Решать эту задачу можно с помощью разных подходов.
Первый подход — периодически проверять прод контрактными тестами:
Раз в N минут запускаются тесты на основе контракта в Git;
Проверка соответствия реальных ответов и спецификации;
При расхождении — алерт в мессенджер.
Можно упростить задачу — не писать такие коллекции, а генерировать из контрактов. В этом случае мы можем быть уверены, что в тесты не просочился человеческий фактор. Для этого нам понадобится инструмент Schemathesis, который позволяет генерировать автотесты на основе API‑контрактов.
Вот как это выглядит:

Есть и другой подход, но для него важно, чтобы у вас был API Gateway. Потому что в рамках API Gateway возможно проводить валидацию:
Сначала Kong/Tyk загружает OpenAPI‑спецификации из Git.
Затем на каждый запрос Gateway валидирует response.
При несоответствии он логирует warning в ELK/Loki.
Dashboard показывает метрики соответствия.
В простом сценарии это настраивается довольно быстро, особенно если API Gateway уже является частью платформы. К тому же, что удобно, благодаря логированию можно всегда вернуться. Кроме того, API Gateway не блокирует пользователя.
AI‑ассистированное ревью
Когда спецификации и требования лежат в Git, ИИ можно подключать не «поверх процесса», а прямо в MR. В GitOps его возможности тоже можно задействовать для таких задач:
автоматический анализ изменений в спецификациях;
поиск потенциальных несоответствий;
предложения улучшенных формулировок;
генерация тестовых сценариев из спецификаций;
автоматическое создание базовых test cases;
проверка полноты документации;
поиск пропущенных edge cases;
предложение дополнительных примеров, которые расширят документацию.
Как перейти на GitOps?
Итак, вы видите, что GitOps действительно может решить многие боли и ускорить разработку, повысить её качество — и всё это без постоянного инструктажа аналитиков и разработчиков, как надо и не надо вносить изменения. Но остаётся вопрос: а легко ли внедрить культуру GitOps в компании?
Я отвечу: на самом деле для этого нужно не так уж много. Начать можно просто с контрактов, добавить пайплайн с линтингом и codeowners с превью. И уже через месяц у вас будет процесс, который затем можно спокойно масштабировать и улучшать.
krakenkaken
Оооо, это мы любим!
Особенно в части доки: если проектная документация (ТЗ/БТ/ФТ) в Markdown — агенты могут использовать ее как контекст для вайбкодинга, вайбтестинга и всего остального вайбового. А ещё пройтись по истории мержей в релизную ветку и сгенерить релиз нотс с документацией.
Давно продвигаем идею, что текстовое сопровождение кода не должно жить отдельно от него — иначе они развиваются не синхронно. В ИИ-эру это начинает ощущаться особенно остро.
Про порог входа и «едва ли сами пойдут в Git читать Markdown»: любой plain text — это данные, а для данных можно строить разные представления. Для нетехнических специалистов тот же Markdown может быть доступен через визивиг. Подробно про эту проблему и наше решение писала тут: https://habr.com/ru/companies/gram_ax/articles/910716/
Спасибо, что тоже продвигаете эту идею! Поставила плюсик :)