如何在由多个应用程序组成的平台上实现持续交付,这些应用程序都依赖于一个数据库和彼此?

问题描述 投票:2回答:3

我们正在研究由多个应用程序组成的旧项目,这些应用程序都使用相同的数据库并且彼此强烈依赖。由于项目的大小,我们无法重构代码,因此它们都将API用作单个数据库源。该平台包含以下应用程序:

  • 网站
  • 管理员/ CMS
  • API
  • Cronjobs

现在我们想要使用Gitlab开始实现CI / CD管道。我们目前遇到了问题,因为我们无法在不破坏所有其他应用程序的情况下更新数据库以部署一个应用程序(除非我们部署所有应用程序)。

我正在考虑一个解决方案,其中一个管道触发所有其他管道。每个管道都将执行所有新添加的数据库迁移,并将测试管道是否仍然按预期工作。如果所有管道都成功,将启动所有应用程序的部署。

我怀疑这是否是一个很好的解决方案,因为这种改变只会增加我们应用程序之间已经很高的耦合。有谁知道如何为我们的平台实施CI / CD更好的解决方案?

database architecture gitlab devops gitlab-ci
3个回答
2
投票

您必须不再将这些视为单独的应用程序。你有一个包含多个模块的整体,但是在它们可以解耦之前,它们都是一个应用程序,并且必须这样部署。

通过假装它们来解决这个问题可能是浪费时间,你的努力会更好地用于实际解耦这些系统。


1
投票

可能有很多解决方案,但我过去所做的一个解决方案是为整个系统的CI / CD创建一个单独的存储库。

每个单独的repo构建该组件,然后您可以在系统级别发布或准备CI时创建标记。

单独的CI / CD仓库为每个项目提供适当的标签,并将CI / CD作为一个单元运行。这允许您为要指定的每个存储库指定哪个标记,这可以防止在对各个组件进行更改时此管道失败。


1
投票

问问自己为什么这些“不同的应用程序”正在使用“同一个数据库”。那是因为所有这些“不同的应用程序”中的每一个都处理“同一个业务语义”吗?如果是这样,正如Rob已经说过的那样,那么你只需要一个应用程序(最重要的是,由于你的业务语义是单数/原子/ ......),因此不会出现任何解耦。

或者db结构中是否有可辨别的部分,以便可以识别出高度准确的映射,说“此组件使用该部分”等等?在那种情况下,是什么导致你说“无法更新数据库以进行部署...”? (BTW“更新数据库”与“重组数据库”不一样。请,请准确。)答案将确定您需要解决的问题。

© www.soinside.com 2019 - 2024. All rights reserved.