Dockerizing Jenkins构建 - 奴隶作为容器或构建为容器?

时间:2016-04-29 18:06:08

标签: jenkins build docker continuous-integration slave

我正在寻找使用Docker在Jenkins CI / CD基础架构中容纳构建的最佳策略。从我看到我有2个选项:

(1)使用Docker插件在Docker主机上按需配置的短暂从属:https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin 一旦构建完成,奴隶就会被处理掉。因此,只有一个构建版本可以在单个从属服务器上运行。

(2)使用CloudBees Docker自定义构建环境插件使用在Docker容器中运行 builds 的静态从属(例如VM):https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Docker+Custom+Build+Environment+Plugin因此,多个(隔离的)构建可以在一个奴隶上运行。

一种方法相对于另一种方法的主要优点/缺点是什么?何时以及为什么我应该选择一个而不是另一个?这对我来说根本不显而易见。

我怀疑构建的权重较轻,因此对于CI / CD基础架构编排大型端到端管道,运行许多作业(2)将更具可扩展性 - 每个Jenkins奴隶在主节点上至少产生2个线程。

修改

1 个答案:

答案 0 :(得分:1)

我的偏好是带有Docker plugin的选项1(短暂的奴隶)。

使用此插件,您可以在全局Jenkins设置中声明构建图像,您可以影响Docker镜像的标签:

enter image description here

在您的工作中,您只需使用相关标签,Docker插件会将相关的奴隶创建到新容器中。

使用Docker插件,Jenkins将在几秒钟内启动一个新的奴隶。因此,即使您正在使用具有大量阶段的管道,它也能正常工作。

这就是我要在Forgerock(我的公司)实施的目标:

  • 2台功能强大的裸机(带SSD,32核和1 TB RAM)
  • 詹金斯Docker plugin
  • 使用Artifactory缓存Maven工件(不下载互联网)
  • docker容器将使用本地Maven缓存(所以我确定不要使用旧的/奇怪的Maven工件)

我在一台小型裸机上做过POC,效果很好:)。

如果您使用没有Maven缓存的短暂奴隶,它可能会成为性能问题。

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

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