首页 > 解决方案 > 在 kubernetes 中使用 Jenkins 和 Deployment 构建特定于租户的 docker 镜像

问题描述

我的应用结构

我正在使用 kubernetes 和 Jenkins 在面向服务的架构中开发一个基于租户的应用程序。在我的应用程序中,它包含 15-20 个使用 Spring Boot 开发的微服务。每个微服务都需要为不同的客户单独部署。如果我有 5 个客户,我需要为这 5 个客户部署 15 个微服务。这是关于我的租户模型的描述。

部署规划

对于这个应用程序,我计划使用 kubernetes 和 Jenkins 来部署和实施 CI/CD 管道。

我的发现

我的应用程序的本质是使用 spring cloud config server active profile 功能从相同的代码为不同的客户构建图像。意味着在我的 docker 文件中,我通过定义哪个是活动配置文件来启动特定的图像。像下面这样,

java -jar -Dspring.profiles.active=<Profile_Name> dbdata-0.0.1-SNAPSHOT.jar

在这里,我在配置服务器中配置配置文件。所以在这里我使用相同的代码来创建属于每个客户的多个图像。

混乱

如果我遵循这种风格,我如何使用 Jenkins 从同一个代码存储库创建和启动不同的图像?是否可以使用 Jenkins 从同一代码存储库启动多个图像?

综上所述,我如何理解按照上述应用程序结构创建和部署多个映像?

标签: jenkinskubernetes

解决方案


由于您有多个微服务,因此最好使用Helm + Chartmuseum之类的工具来简化这些服务的管理。在这种情况下,您将拥有每个租户的单独版本(和 Kubernetes 命名空间)。如果每个租户需要不同的 docker 镜像,您可以使用不同的 docker 镜像标签。

至于 Jenkins 部分,我没有看到任何问题(您可以从 1 个 repo 构建任意数量的 docker 映像):

  • 创建作业以生成和上传 docker 图像
  • 创建工作以生成和上传 Helm 图表
  • 创建作业以在 Kubernetes 中部署/更新版本

如果它们仅在命令行上有所不同,则不需要构建不同的 docker 映像。此命令行(或环境变量)可以在 Kubernetes 资源描述中被覆盖。


推荐阅读