Jenkins的Dockerizing构build – 作为容器的奴隶或作为容器构build?

我想知道使用Docker在Jenkins CI / CD基础架构中集装箱化的最佳策略。 从我看到我有2个选项:

(1)使用Docker插件,在Docker主机上使用按需configuration的临时从属: https : //wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin一旦构build完成,从属处置被处置。 因此,只有一个构build可以在单个从站上运行。

(2)使用CloudBees Docker自定义构build环境插件在Docker容器中运行构build的静态从站(例如VM): https : //wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Custom+Build+Environment +插件因此,多个(独立的)构build可以在单个从站上运行。

一种方法的主要优点和缺点是什么? 何时和为什么我应该select一个在另一个之上? 这对我来说不是显而易见的。

我怀疑构build体的重量更轻,因此对于一个CI / CD基础结构来说,编排一个大型的端到端stream水线, 其中许多作业运行(2)将更具可扩展性 – 每个Jenkins从节点在主节点上至less有2个线程。

编辑

我的首选是Docker插件的选项1(临时奴隶)。

使用这个插件,你可以在全局的Jenkins设置中声明你的构build图像,你可以将标签影响到你的Docker镜像:

在这里输入图像说明

在你的工作中,你只需要使用相关的标签,Docker插件将创build相关的slave到一个新的容器中。

使用Docker插件,Jenkins将在几秒钟内启动一个新的slave。 所以即使你使用了很多阶段的pipe道,它也能正常工作。

这是我要在Forgerock(我的公司)实现的:

  • 2个function强大的裸机(带有SSD,32个内核和1TB的RAM)
  • Jenkins Docker插件
  • 使用Artifactorycaching的Maven工件(不要下载互联网)
  • docker的容器将使用本地的Mavencaching(所以我一定不要使用旧的/奇怪的Maven artefact)

我在一个小的裸机上做了POC,效果很好:)

如果你使用短暂的奴隶没有Mavencaching,它可能成为一个问题的performance。

关于Jenkins插件,有一个由Nicolas De Loof开发的新插件 : Docker Slaves插件 。

我必须尝试这个新的插件。