在Docker容器中构buildCoverity时进行扫描

我有一个自定义的Docker容器,在该容器中执行项目的构build和testing。 它以某种方式与Travis CI整合。 现在我想从Travis CI中运行Coverity扫描分析,但是棘手的部分是(如果我正确理解Coverity文档),我需要运行构build。 然而,构build运行在容器中。

现在,根据cov-build –help

cov-build或cov-build-sbox命令拦截由构build系统调用的对编译器的所有调用,并捕获文件系统中的源代码。

我试过了:
cov-build --dir=./cov docker exec -ti container_name sh -c "<custom build commands>"

但是,采用这种方法,Coverity显然不能捕捉到编译器的调用(考虑到Docker的理念,这是可以理解的),并且不会发出任何文件

想要的东西(至less在希望得到更好的解决scheme的时候):

  • 在本地安装所有必要的东西在容器中build立只能够运行Coverity扫描。
  • 从容器中运行cov-build,因为:

    • 我相信这会显着增加docker的图像尺寸
    • 我使用Travis CI 插件进行Coverity扫描,这会使事情变得复杂。

特拉维斯CI部分只是FWIW,尝试了所有的地方,它也不起作用。

我对这个问题的任何build议感到激动。 谢谢。

如果你愿意调整构build,你可以将你的“编译器”改为cov-translate <args> --run-compile <original compiler command line> 。 这实际上是cov-buildcov-build的(因为你的编译器已经运行了,所以不需要run-compile ),并且应该会导致构build捕获。

好的,我解决了这个问题。

  • 我下载并修改了(仅适用于我的环境的一些修改)Travis用来下载和运行Coverity扫描的脚本 。

  • 然后我把Coverity安装到主机上(在我的情况下是Travis CI机器)。

  • 我运行了Docker容器并使用docker run -dit -v <coverity-dir>:<container-dir>:ro ...装载了安装Coverity docker run -dit -v <coverity-dir>:<container-dir>:ro ... 。 这样我就避免了增加docker图像的大小。

  • 执行cov-build命令并直接从docker容器使用脚本的另一部分上传分析。

希望这可以帮助有人在类似的问题挣扎。

Interesting Posts