Сборка в Gitlab как маркер здоровья архитектуры

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Не так давно мне довелось настраивать СI/CD для среднего по размеру проекта, состоящего из +-20 микросервисов и 5 переиспользуемых библиотек. Изначально все микросервисы и библиотеки жили в собственных репозиториях и я настроил CI/CD индивидуально для каждой репы, вынеся общие скрипты и настройки в отдельный проект. Так мы пожили какое-то время, после чего пришла идея объединить все в монорепу, для удобства сопровождения и большей прозрачности при разработке.

Для монорепозитория CI/CD был реализован следующим образом: каждый сервис содержит свой файл .gitlab-ci.yml с описанием пайплайна, при этом корневой файл сборки проекта содержал директиву включения/исключения CI-файлов конкретных сервисов в зависимости от того были ли в них или их зависимостях изменения.

И была среди прочих компонентов одна непримечательная библиотека common-dto. Из названия создаётся впечатление, что в ней должны лежать различные верхнеуровневые абстракции для DTO, от которых наследуется большая часть сервисных DTO. Однако все оказалось не так просто. Ещё во время сбора монорепы я обратил внимание, что в этой библиотеке как-то многовато специфических DTO, которые принадлежат конкретным сервисам. Оказалось, что туда были положены все DTO, используемые более чем в одном сервисе.

Не сложно догадаться, что от common-dto зависили ВСЕ сервисы. При этом вопреки правилу чистой архитектуры, которое гласит, что компонент от которого зависят многие должен быть наиболее стабильным, common-dto дополнялась буквально в каждом втором merge-request'e, из-за чего все компоненты системы пересобирались (это занимает +- 20 мин).Таким образом сборка проекта в очередной раз подсветила проблемную архитектуру.

Что вы думаете о конвеерах CI/CD как маркере архитектуры?

Были бы вам интересны подробности настройки CI/CD для Java монорепозитория и как в итоге была отрефакторена common-dto?

Пожалуйста напишите в комментариях.

Источник: https://habr.com/ru/articles/794420/


Интересные статьи

Интересные статьи

Все мы понимаем для enterprise решений требуется тщательного анализа в плане проектирование и этому уделяется не мало времени, от структуры папок, описании регламента по стилям или коду, подключение м...
Всем привет! Меня зовут Юра, я Python-разработчик в Точке. В статье я покажу, как написать шаблон с линтером для Gitlab CI, чтобы при старте нового проекта (или уже запущенного) было легко добавить ли...
Команда Netflix Cloud Data Engineering работает с различными приложениями для JVM, включая такие популярные хранилища данных, как Cassandra и Elasticsearch. Хотя большинство наших кластеров стабил...
С момента выхода третьей части истории Альфы прошло довольно много времени. Признаюсь честно, я всячески оттягивал написание завершающей главы, и на то были причины. Во-первых, как оказалось, писать...
Архитектор – это звучит… Звучит как-то не понятно. Наверное, поэтому всегда добавляют что-то. Ну типа «системный архитектор» или там «программный архитектор». Не то чтоб ...