当使用在容器中运行的Jenkins从属服务器时,Docker中Docker的替代方案或“安全”(安全性)实现是什么。

架构示例: Jenkins主服务器作为Docker容器运行
Jenkins从服务器作为Docker容器运行
测试任务在Docker容器中执行

一些已知的替代方法:


DOOD(Docker-Outside-Of-Docker)

使用Docker API的Jenkins插件

约束说明:想法是使用Jenkins作为编排器,使用Docker以获得干净的环境,建筑的其余部分可能会发生变化。

评论

谢谢您提出这个问题,您已经教会我有关Docker中的Docker的知识-对于该主题的其他新手,那么值得阅读JérômePetazzoni关于其优缺点的描述。

@RichardSlater取决于工作负载的定义方式(工作/天,从属/主设备,cpu,数据/工作),但问题更为笼统。所有列出的安全性,乌龟,性能都是要避免的合法候选人,以及“JérômePetazzoni在描述...的优缺点时所提到的” hacking hack”的味道。

不,尚不清楚您的体系结构是否仍必须依赖docker中的jenkins从属。无论如何,在同一主机(或Docker映像FWIW)上具有多个版本的ruby / python / java的技巧是众所周知的,而nodejs或Go的技巧则不太“常见”,并且较不容易设置。因此,我真的不确定您的开放方式和不知道的开放方式。如果计划仍然让詹金斯(Jenkins)作为编排者和Docker在干净的环境中工作,那么有地方要回答,如果从属必须在Docker环境中,那么一切将是一个丑陋的hack,您无法真正信任测试结果。

@Tensibai感谢您对问题的澄清,我的观点是使问题更加笼统,以便在答案(包括您提到的问题)中留出更多创造空间。对于特定情况,窍门是已知的并且正在被使用,Docker提供的机会是为所有类型的工作负载提供一种实现方式,如果可能的话,请尝试着重使其稳定和安全。

@Tensibai谢谢您的反馈,对问题的澄清也很清楚。

#1 楼

为了避免依赖dind(从dockerfile构建新映像应该没关系),我会环顾Jenkins的kubernetes插件。 jenkins代理一次在干净的隔离环境中运行测试,然后将其撕下。 kubernetes集群的维护成本不应大于维护您的Jenkins奴隶。

好处是,您可以在特定环境下对奴隶进行版本控制,而不必为ruby / java / python的倍数版本进行调整,并让任务通过指定适当的“环境”无需进行任何预测试就可以使用并具有可测试环境的代理映像。

我将kurbenetes作为容器调度程序,因为它的配置和维护相对轻量级。

评论


很好的方法,可以使用群集,也可以使用群集,IMO群集是一个很好的选择,因为它相对易于维护,但是可以带来稳定性和太过新鲜的技术价格

–菱形
17 Mar 28 '17 at 11:49

@rombob确实如此,而mesos对于此用例来说维护起来很繁重,并且可能过于矫kill过正,我想知道在此答案中说明此比较/观点是否有意义。

–滕西拜
17 Mar 28 '17:50



也许比较将是一个新问题的最佳候选人

–菱形
17 Mar 28 '17 at 11:53

@rombob通常它们会很快消失,特别是在积极开发中的蜂群中,它几乎每周都需要更新。因此,我会避免这种情况,即使在整个列表或赞成/反对之后,即使是博客帖子也不清楚问题所在

–滕西拜
17 Mar 28 '17 at 11:58

使用Jenkins Kubernetes插件时,如何动态选择要构建的容器。我使用Jenkins Kubernetes插件,但我仍使用dind,因为我想在容器内部构建。我有一个带有容器的从属容器,但是必须有更好的方法。

– David West
18 Mar 12 '18 at 11:18