我的应用结构
我正在开发基于租户的面向服务架构的应用程序,并使用kubernetes和Jenkins进行部署。在我的应用程序中,它包含15-20个使用spring boot开发的微服务。每个微服务需要为不同的客户单独部署。如果我有5个客户,我需要为这5个客户部署15个微服务。这是关于我的租赁模型的描述。
部署规划
对于这个应用程序,我计划使用kubernetes和Jenkins来部署和实现CI / CD管道。
我的发现
我的应用程序的性质是通过使用spring cloud配置服务器活动配置文件功能,从相同的代码为不同的客户构建映像。意味着在我的docker文件中,我通过定义哪个是活动配置文件来启动特定图像。如下,
java -jar -Dspring.profiles.active=<Profile_Name> dbdata-0.0.1-SNAPSHOT.jar
这里我在配置服务器中配置配置文件。所以我在这里使用相同的代码来创建属于每个客户的多个图像。
混乱
如果我遵循这种风格,我如何使用Jenkins从相同的代码库创建和启动不同的图像?是否可以使用相同代码存储库中的Jenkins启动多个图像?
总之,如何根据上述应用程序结构了解多个映像创建和部署?
由于您有几个微服务,最好使用Helm + Chartmuseum等工具来简化这些服务的管理。在这种情况下,您将为每个租户提供单独的版本(和Kubernetes命名空间)。如果每个租户需要不同的泊坞窗图像,则可以使用不同的泊坞窗图像标签。
至于Jenkins部分,我没有看到任何问题(你可以从1个repo构建任意数量的docker图像):
如果它们仅在命令行中有所不同,则不需要构建不同的docker镜像。可以在Kubernetes资源描述中覆盖此命令行(或env变量)。