在Jenkins的Docker中运行我的APItesting是否有优势?

我已经在Ruby中编写了APItesting ,目前被ctest调用来执行。 我把所有我需要的东西放到一个Dockerfile中进行封装。 因此,容器会提取最新的软件版本,将所需的许可证放入容器,最后是我们的Ruby APItesting的最新版本,对我们的软件进行黑盒testing(非web /独立)。

我想 – 这是一个好主意,如果我想与他人分享我的形象,或者我也可以在不同的容器(甚至可能每个容器只有一个)不同数量的testing,从而节省时间运行testing为开发者提供简短的反馈循环。

现在,公司内部的人问我:“为什么你这样做?为什么不把整个环境直接放在Jenkins的专用节点上运行testing?”

由于我对docker工人还是个新手,所以我不能100%确定自己是否开始了正确的事情。 我只是从目前为止所听到的有关Docker的事情中吸引了我,我的印象是我正处于正确的轨道上。

现在我的问题是 – 你怎么看? 这是要走的路吗? 你对这个策略有什么优点和缺点?

一些想法做完你所描述的一年左右。 (可能包含奖金信息)

如果Jenkins的目的是实际产生和成像,并将其推送到图像存储库,那么这将更有意义。 您通常会推送到您的公司的私有存储库或Docker中心的开源项目。

在构build系统中使用docker有一些挑战。 docker引擎中的数据量一直在堆积,你需要一些方法来清理。 你可以做一个周期性的docker system purge --all所有的东西都擦,但是要记住,这也会擦掉基本的图像。

另外一个挑战是Docker中的构build和testing可以为每项工作增加额外的时间,但是这可以通过一些调整来提高。

您可以通过将映像registry设置为通过caching来提高性能。 我会说这是强制性的,因为docker中心不能免于失败。 我们躲过了一次子弹,上次docker中心在黄金时间下降了4-5个小时。 当然还有其他的注册项目也支持这一点。

我也在dockertesting。 这些服务将在docker中运行,因此在docker中testing它们是有意义的。 我只是依靠容器的退出状态来确定成功/失败。 对于一些人来说,这是不够的,因为一些testing系统可能会使用插件进行更详细的报告。

另一个问题是如何处理缩放。 Jenkins中有节点的想法是分散负载。 如果所有的节点使用相同的远程引擎,它可能会变得很难看。 我认为最简单的解决scheme是在单独的主机和docker引擎上运行每个Jenkins节点。 然后,它将在已经运行的docker引擎中完成所有的工作。您可以通过挂载套接字文件或通过TLS与之交谈。

总的来说,我认为它效果很好。 只要知道,你可能会失去在jenkins的一些更高级的function。 在当地进行testing和build设可以有一些优势,但是我个人并不需要它们。 我主要只是build立图像(依赖已准备好在私人/本地软件包储存库)