在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-build
在cov-build
的(因为你的编译器已经运行了,所以不需要run-compile
),并且应该会导致构build捕获。
好的,我解决了这个问题。
-
我下载并修改了(仅适用于我的环境的一些修改)Travis用来下载和运行Coverity扫描的脚本 。
-
然后我把Coverity安装到主机上(在我的情况下是Travis CI机器)。
-
我运行了Docker容器并使用
docker run -dit -v <coverity-dir>:<container-dir>:ro ...
装载了安装Coveritydocker run -dit -v <coverity-dir>:<container-dir>:ro ...
。 这样我就避免了增加docker图像的大小。 -
执行
cov-build
命令并直接从docker容器使用脚本的另一部分上传分析。
希望这可以帮助有人在类似的问题挣扎。