Jenkins用于微服务系统的CI / CD设置

时间:2018-12-10 16:25:23

标签: jenkins devops

我有一个包含数十个微服务的系统,所有微服务都以相同的方式构建和发布-每个都在docker容器中,并部署在Kubernetes集群中。

有多个集群(Dev1,dev2,QA ... Prod)

我们正在使用Jenkins部署每个微服务。每个微服务都有其自己的管道,并且对于每个环境,该管道都是重复的,就像这样:

DEV1 (视图)

  • dev1_microserviceA (工作/管道)
  • dev1_microserviceB
  • ...
  • dev1_microserviceX

DEV2

  • dev1_microserviceA
  • dev1_microserviceB
  • ...
  • dev1_microserviceX

...

PROD

  • dev1_microserviceA
  • dev1_microserviceB
  • ...
  • dev1_microserviceX

每个管道几乎都是相同的,区别实际上只是环境,参数,微服务名称,git repo名称之类的参数。

一些通用代码在每个管道使用的库中。这是正确/典型的设置,也是重构程度最高的设置吗?我想避免为每个微服务和每个环境创建管道,但不确定我进一步的重构选项是什么。我是Jenkins&devop的新手。

我已经研究了参数化的管道,但是我不想每次都需要输入参数时也不需要输入参数,而且还需要能够链接构建,并一目了然地看到所有构建的结果,在每种环境中。

1 个答案:

答案 0 :(得分:0)

我将使用声明性管道,您可以在其中在存储库中的本地<configuration scan="true" debug="true"> <property resource="application-dev.properties" /> <appender name="consoleAppender" class="${myapp.test.appender-class}"> 中定义逻辑。

使用Jenkins,您可以拥有“母版” Jenkinsfile和/或可以通过调用上游项目来继承的项目。这将使您有效地共享您的指令并减少重复。

关于CI / CD,通常从未涉及的是部署的“管理”。由于大多数CI / CD服务都是无状态的,因此没有部署应用程序的概念。

GitLab在这方面已经走了很长一段路,但Jenkins却远远落后。

由于Jenkins的工作原理,最终您必须为每个存储库/目的创建一个单独的项目,或者(建议)使用一个“主”项目,让您传递项目名称,git repo之类的信息网址,特定的应用程序变量和值等等。