我正在寻找使用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个线程。
修改
答案 0 :(得分:1)
我的偏好是带有Docker plugin的选项1(短暂的奴隶)。
使用此插件,您可以在全局Jenkins设置中声明构建图像,您可以影响Docker镜像的标签:
在您的工作中,您只需使用相关标签,Docker插件会将相关的奴隶创建到新容器中。
使用Docker插件,Jenkins将在几秒钟内启动一个新的奴隶。因此,即使您正在使用具有大量阶段的管道,它也能正常工作。
这就是我要在Forgerock(我的公司)实施的目标:
我在一台小型裸机上做过POC,效果很好:)。
如果您使用没有Maven缓存的短暂奴隶,它可能会成为性能问题。
关于Jenkins插件,有一个由Nicolas De Loof开发的新插件:Docker Slaves plugin。
我必须尝试这个新的插件。