我在Ruby中编写了 API测试,目前由ctest 调用以执行。 我将所有需要的东西放入Dockerfile进行封装。 因此,Container提取最新的软件版本,将所需的许可证放入容器中,最后是我的Ruby API测试的最新版本,对我们的软件进行黑盒测试(非网络/独立)。
我想 - 如果我想与其他人分享我的图像,或者我也可以在不同的容器中放置不同数量的测试(甚至每个容器只有一个),这是一个好主意,从而节省运行时的时间测试为开发人员提供简短的反馈循环。
现在公司内部的人问我"为什么这样做? 为什么不将整个环境直接放在Jenkins的专用节点上来运行测试?"
由于我仍然对码头新手,我不能100%确定我是否已经开始做正确的事情。到目前为止,我只是从我听到的关于Docker的事情中吸引了我,并且我的印象是我在正确的轨道上。
现在我的问题是 - 您怎么看? 这是要走的路吗? 您对此策略的利弊是什么?
答案 0 :(得分:1)
完成你所描述的大约一年之后的一些想法。 (可能包含奖励信息)
如果目的是让Jenkins实际生成并映像并将其推送到图像存储库,那么它将更有意义。您通常会推送到公司的私有存储库或Docker hub以进行开源项目。
在构建系统中使用docker存在一些挑战。 docker引擎中的数据量不断堆积,您需要一些方法来清理。您可以使用期刊docker system purge --all
擦除所有内容,但请记住,这也会擦除基本图片。
另一个挑战是在docker中构建和测试可以为每个作业增加额外的时间,但这可以通过一些调整来改善。
您可以通过设置image registry as a pull through cache来提高效果。我认为这是强制性的,因为docker hub不能免于失败。上次码头中心在黄金时段下降了4-5个小时,我们躲过了一颗子弹。当然还有其他注册表项目也支持这一点。
我也在docker中进行测试。这些服务将在docker中运行,因此在docker中测试它们是有意义的。我只依靠容器的退出状态来确定成功/失败。对于某些人来说这还不够,因为一些测试系统可能会使用插件进行更详细的报告。
另一个问题是如何处理缩放。在Jenkins中拥有节点的整个想法是分散负载。如果所有节点都使用相同的远程引擎,它可能会很快变得丑陋。我认为最简单的解决方案是在单独的主机和docker引擎上运行每个Jenkins节点。然后它会在已经运行的docker引擎中完成所有工作。你可以通过挂载套接字文件或通过TLS与它通信来完成。
总的来说,我觉得它很棒。请注意,您可能会失去Jenkins的一些更高级的功能。在本地运行测试和构建可以有一些优势,但我个人并不需要它们。我主要只是构建图像(依赖关系在私有/本地包存储库中已准备就绪)