jenkins - 在 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 从同一代码存储库启动多个图像?
综上所述,我如何理解按照上述应用程序结构创建和部署多个映像?
解决方案
由于您有多个微服务,因此最好使用Helm + Chartmuseum之类的工具来简化这些服务的管理。在这种情况下,您将拥有每个租户的单独版本(和 Kubernetes 命名空间)。如果每个租户需要不同的 docker 镜像,您可以使用不同的 docker 镜像标签。
至于 Jenkins 部分,我没有看到任何问题(您可以从 1 个 repo 构建任意数量的 docker 映像):
- 创建作业以生成和上传 docker 图像
- 创建工作以生成和上传 Helm 图表
- 创建作业以在 Kubernetes 中部署/更新版本
如果它们仅在命令行上有所不同,则不需要构建不同的 docker 映像。此命令行(或环境变量)可以在 Kubernetes 资源描述中被覆盖。
推荐阅读
- javascript - 我如何使用平面列表返回对象列表?
- c++ - delete c in void insert() 打印无限数,如果我将其注释掉,我会得到正确的输出
- java - 使用单个 json 但发布多个 AVRO 消息
- arrays - 如何将用户输入收集到 VBA 中的数组
- c++ - SFINAE 检测 CTAD 扣除指南的明确性
- visual-studio-code - VSCode 中选择的自定义转换,无需编写扩展
- python - bin 标签必须比 bin 边缘的数量少一
- javascript - 如何在使用 jquery 调整窗口大小时将导航链接更改为 btn?
- flutter - Navigator.pop() 没有关闭 showModalBottomSheet
- java - HashSet 添加了两个对象,它们为 equals() 返回 true 并且在 Java 中具有相同的哈希码