Как реализовать непрерывную доставку на платформе, состоящей из нескольких приложений, которые все зависят от одной базы данных и друг от друга? - PullRequest
2 голосов
/ 23 апреля 2019

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

  • Веб-сайт
  • Администратор / CMS
  • API
  • Cronjobs

RightТеперь мы хотим начать реализацию конвейера CI / CD с использованием Gitlab.В настоящее время у нас возникают проблемы, поскольку мы не можем обновить базу данных для развертывания одного приложения, не нарушая все другие приложения (если мы не развернем все приложения).

Я думал о решении, в котором один конвейер запускает вседругие трубопроводы.Каждый конвейер выполнит все добавленные миграции баз данных и проверит, работает ли конвейер так, как должен.Если все конвейеры завершатся успешно, начнется развертывание всех приложений.

Я сомневаюсь, что это хорошее решение, потому что это изменение только увеличит и без того высокую связь между нашими приложениями.Кто-нибудь знает лучшее решение, как реализовать CI / CD для нашей платформы?

Ответы [ 3 ]

2 голосов
/ 23 апреля 2019

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

1 голос
/ 24 апреля 2019

Задайте себе вопрос почему эти "разные приложения" используют "одну и ту же базу данных".Это потому, что все эти «отдельные приложения» имеют дело с «одной и той же семантикой бизнеса»?Если это так, как уже сказал Роб, то у вас просто есть одно приложение (и вдобавок к этому не будет разъединяющим именно потому, что ваша бизнес-семантика является единственной / атомарной /...).

Или в структуре БД есть различимые части, позволяющие идентифицировать высокоточное отображение, говорящее «этот компонент использует эту часть» и т. Д. И т. Д.?В таком случае, что заставляет вас говорить что-то вроде «не могу обновить базу данных для развертывания ...» ???(Кстати, «обновить базу данных» - это не то же самое, что «реструктурировать базу данных». Пожалуйста, пожалуйста be точный .) Ответ на этот вопрос определит, что вы должны решить.

1 голос
/ 23 апреля 2019

Вероятно, существует множество решений, но одно из них, которое я сделал в прошлом, - это создание отдельного репозитория для CI / CD всей системы.

Каждый отдельный репозиторий создает этот компонент, и затем вы можете создавать теги по мере их выпуска или готовности к CI на системном уровне.

Отдельное репо CI / CD извлекает соответствующие теги длякаждый элемент и запускает CI / CD против всех них как одно целое.Это позволяет вам указать, какой тег для каждого репо вы хотите указать, что должно предотвратить сбой этого конвейера при внесении изменений в отдельные компоненты.

...