架构示例: Jenkins主服务器作为Docker容器运行
Jenkins从服务器作为Docker容器运行
测试任务在Docker容器中执行
一些已知的替代方法:
DOOD(Docker-Outside-Of-Docker)
使用Docker API的Jenkins插件
约束说明:想法是使用Jenkins作为编排器,使用Docker以获得干净的环境,建筑的其余部分可能会发生变化。
#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
评论
谢谢您提出这个问题,您已经教会我有关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谢谢您的反馈,对问题的澄清也很清楚。