我有一个自定义 Docker 容器,我在其中执行项目的构建和测试。它以某种方式与Travis CI整合在一起。现在我想在Travis CI中运行 Coverity scan 分析,但是棘手的部分是(如果我理解正确的Coverity文档),我需要运行构建。但是,构建在容器中运行。
现在,根据cov-build --help
cov-build或cov-build-sbox命令拦截对该的所有调用 编译器调用的编译器,并从中捕获源代码 文件系统。
我尝试了什么:
cov-build --dir=./cov docker exec -ti container_name sh -c "<custom build commands>"
然而,使用这种方法,Coverity显然没有捕获对编译器的调用(考虑到Docker哲学,它是完全可以理解的)而没有发出文件
我不想要什么(至少在希望有更好的解决方案时):
从容器内运行cov-build,因为:
Travis CI部分只是FWIW,在本地尝试了所有这些,它也不起作用。
我对这个问题的任何建议感到非常兴奋。谢谢。
答案 0 :(得分:1)
好的,我解决了这个问题。
我下载并修改了(只需进行一些修改以适合我的 环境)Travis用来下载和运行Coverity的script 扫描。
然后我将Coverity安装到主机上(在我的案例中是Travis CI机器。)
我运行了docker容器并将目录挂载到了
使用docker run -dit -v <coverity-dir>:<container-dir>:ro ...
安装Coverity。这样我就避免增加docker图像大小。
执行cov-build
命令并使用上传分析
直接来自docker容器的script的另一部分。
希望这有助于某些人遇到类似问题。
答案 1 :(得分:0)
如果您可以调整构建,可以更改编译器&#34;是/var/www/html/
。这实际上是cov-translate <args> --run-compile <original compiler command line>
在引擎盖下做的事情(减去cov-build
,因为你的编译器已在运行),并且应该导致构建捕获。
答案 2 :(得分:0)
这是我使用的解决方案:
在“脚本”,“ after_script”或所需的Travis作业生命周期的另一个阶段中
第6步应该在容器内可行,但我通常在外部进行。
也不要忘记将COVERITY_SCAN_TOKEN加密并作为环境变量导出。
一个具体的例子通常比一长篇文章更容易理解;这是适用于以上步骤的提交,用于生成结果并将其发送到Coverity Scan:
https://github.com/BoubacarDiene/NetworkService/commit/960d4633d7ec786d471fc62efb85afb5af2bed7c