【问题标题】:Jenkins Docker image building for Different Tenant from same code repository来自同一代码库的不同租户的 Jenkins Docker 映像构建
【发布时间】:2018-08-25 00:51:45
【问题描述】:

我正在尝试为我的 Spring Boot 微服务部署实现 CI/CD 管道。我计划使用 Jenkins 和 Kubernetes 来制作 CI/CD 管道。我有一个用于版本控制的 SVN 代码库。

应用性质

我的应用程序的性质是,需要为多个租户部署一个微服务。实际上代码相同,但不同租户的数据库配置不同。我正在使用 Spring 云配置服务器管理配置。

我的要求

我的要求是,当我将代码提交到我的 SVN 代码存储库时,Jenkins 需要拉取我的代码,构建项目(Maven),并且需要为多个租户创建 Docker Image。并且需要部署。

这里的事情是,提交到一个代码仓库需要从同一个代码仓库构建多个 docker 镜像。意味着一个代码仓库 - 多个 docker 镜像构建过程。实际上,Dockerfile 包含针对不同 docker 映像的不同配置,即。对于不同的租户。所以这里我的要求是我需要为不同的租户构建多个 docker 镜像,并使用 Jenkins 从一个代码仓库在 Dockerfile 中添加不同的配置

我的分析

我目前正计划通过添加多个 Jenkins 管道作业连接到相同的代码仓库来做到这一点。在 Jenkins 管道作业中,我可以添加不同的配置。因为不同租户的镜像名称需要保持不同,需要将镜像推送到Dockerhub中。

我的困惑

我的困惑是,

  1. 我可以使用 Jenkins 从同一代码库添加多个管道作业吗?
  2. 如果我可以从同一个代码仓库添加多个管道作业,我如何将每个租户的映像部署到 kubernetes ?我需要添加作业以进行部署吗?还是一项工作就足以部署?

【问题讨论】:

  • 专业提示:您的问题有点啰嗦,而且在我看来(物有所值!)不是我们在这里理想寻求的那种技术写作。您有 70 个问题,其中包含“请任何人帮助我澄清我对 X 的困惑”形式的短语。答案总是“是”——它本身没有用——但它也相当模糊。如果您已经列出了您特别坚持的内容,那么可以删除闲聊的材料。延伸阅读:Why is “Can someone help me?” not an actual question?
  • 值得注意的是,语言会影响 Stack Overflow 上问题的接收方式。自信的措辞通常很受欢迎,恳求和顺从并不多。关于这个主题,这个讨论可能很有趣:How can we encourage (new) authors to ask confident questions?

标签: jenkins configuration kubernetes jenkins-pipeline


【解决方案1】:

你好像有点不对劲。

由于所有租户的代码都是相同的,唯一的区别是配置,因此在部署到 Kubernetes 时,最好创建一个 docker 映像并将其与租户特定的配置一起部署。

因此,您在存储库中的更改将触发 一个 Jenkins 构建并生成 一个 docker 映像。然后,您可以拥有多个 Jenkins 作业或管道中的多个步骤,将具有租户特定配置的 docker 映像部署到 Kubernetes。

如果您不想注意以上内容,以下是您问题的答案:

  1. 您可以在 Jenkins 中从同一存储库创建多个管道。 (选择New item > pipeline 多次)。
  2. 您可以保留租户列表,然后在单个管道阶段中循环或并行运行所有部署。

【讨论】:

  • 感谢您的回复。你的陈述中有一件事。我没有使用配置进行部署。取而代之的是,我正在使用 spring cloud config server active profile 功能构建具有不同配置的 docker 映像。我正在添加 dockerfile,如下所示 - FROM openjdk:8 ADD target/dockerDemo-0.0.1-SNAPSHOT.war dockerdemo.war EXPOSE 8080 ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=testprofile" , "dockerdemo.war"]
  • 这里你可以看到我使用的是spring cloud config server和active profile。如果我正在定义活动配置文件 =“Test”,则名称为“Test”的配置将从配置服务器加载。它包含一个数据库配置。而且我可以使用不同的不同数据库配置设置许多配置文件。我只需要在 Dockerfile 中定义哪个是活动配置文件。因此 docker 镜像将使用选定的配置构建。然后需要部署。我不喜欢使用不同的配置进行部署。当我构建 Docker 映像时,我正在构建具有不同配置的映像。它将加载不同的数据库配置
  • 所以我正在寻找为相同的代码仓库创建多个管道作业。在每个管道作业中,我需要根据我指定的名称将构建的图像推送到 dockerhub。因此,当对 repo 进行提交时,需要触发 6 个管道作业(假设我有 6 个不同的租户)。这就是我正在寻找的方式。你的2点我还在探索。我希望你能理解我的方法。
  • 我仍然会说你有 config "-Dspring.profiles.active=testprofile" 可以在部署期间传递。有关在将 pod 部署到 Kubernetes 时如何传递命令行参数的示例,请参阅 stackoverflow.com/questions/34238765/…。您绝对不需要将其烘焙到您的 docker 映像中。
  • 是的。我明白了重点。感谢您的回复阿米特先生
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2019-11-15
  • 2020-10-06
相关资源
最近更新 更多