我正在尝试使用来自Jenkins的gcovr生成代码覆盖率报告,但无济于事,它不会产生结果但是如果我从终端运行它,它工作正常。 这是我通过jenkins执行的命令来生成相同的命令:
gcovr -r /path/to/sourcefiles --object-directory=/Users/testinganywhere1/pathtogcdafile -x -b -e /Developer 1> html/coverage.xml 2>/tmp/Error.txt
如果我通过终端运行相同的工作grt!
感谢您的帮助!
PS:我在主机上运行jenkins并指示它在从机上执行作业。
答案 0 :(得分:1)
您必须先执行对象目录才能执行
cd /Users/testinganywhere1/pathtogcdafile;
gcovr -r /path/to/sourcefiles --object-directory=/Users/testinganywhere1/pathtogcdafile -x -b -e /Developer 1> html/coverage.xml 2>/tmp/Error.txt
答案 1 :(得分:0)
对于有这个问题的其他人来说,对我来说,这在从命令行作为Jenkins用户运行而在实际运行Jenkins时设置的路径中存在差异。
所以尝试在Jenkins中运行“echo $ PATH”并从命令行手动运行,然后比较两者。
答案 2 :(得分:0)
我最近在 Jenkins 和 SonarQube 上运行了这个。该配置旨在通过社区CXX插件将数据导入SonarQube,但覆盖文件也可以由Jenkins的Cobertura插件使用。
有问题的部分是在XML报告中获取源文件名是否正确。对于SonarQube,他们应该相对于"项目根",这就是' sonar-project.properties'位于,或SonarQube"跑步者"被调用。在我们的例子中,这与工作区的根不同。
' gcovr'的版本我们需要的是目前的HEAD修订版(2017-06-14),因为发布的3.3版本对我们没有用。另外,我必须规范化gcovr' process_gcov_data'中的文件路径。功能,在确定后,但在应用过滤之前。对于我们提取的版本,将以下内容添加为第524行:
fname = os.path.normpath (fname);
' gcovr'有一个限制,它只能在根目录和对象目录之间的文件夹中找到文件 - 一维搜索。但是,此行外的文件可能出现在gcov数据包含相对文件名规范的位置,例如头文件。我用gcovr提出了一张票来搜索根的子目录,但我不会屏住呼吸。
我们打电话给' gcovr'那么:
cd <project-root> && gcovr \
<object-directory> \
--root=<project-root> \
--xml-pretty \
--exclude-unreachable-branches \
-o <output-xml>
其中<object-directory>
是包含目标文件和覆盖率数据的位置,<project-root>
是我们项目的基础。所有都是绝对路径,<object-directory>
位于<project-root>
。
在我们的案例中,在<project-root>
和<object-directory>
之间的目录中的测试来源 - 尽管我不喜欢这种对gcovr&#39;的限制。
然后<output-xml>
包含Cobertura格式的XML覆盖,其文件路径相对于<project-root>
。
使用 Cobertura插件将它们导入Jenkins。在我们的例子中,我们使用管道脚本,并在&#34;管道语法&#34;页面插件显示为step
代码段的子选项:
step([
$class: 'CoberturaPublisher',
coberturaReportFile: '<output-xml>',
failNoReports: false,
failUnhealthy: false,
failUnstable: false,
maxNumberOfBuilds: 100
])
您的选项可能会有所不同,我们会将该文件指定为通配符。
然后,该报道出现在Jenkins的项目页面中,作为摘要图表和“覆盖率报告”的链接&#39;这似乎很准确。
XML格式包含<source>
标记,其中列出了Jenkins使用的<project-root>
的绝对路径。如果这是相对于工作空间,那将是更好的,但这是另一天。然后,文件名相对于此<source>
位置。
SonarQube插件很痛苦,因为它忽略了<source>
标记,并且要求文件名只是相对于<project-root>
(调用了声纳跑步者)。
我现在对我用来锻炼这个模板的项目显示1%的覆盖率 - 但它的数据路径目前非常重要......
答案 3 :(得分:0)
将 JENKINS 路径设置为正确的 GCOV.EXE 还不够!
您必须添加另一个运行时选项,以确保 python 脚本知道 gcov.exe 在执行新任务时的位置。
因此,有效的附加命令行选项是:
--gcov-executable (PATH TO THE GCOV EXECUTABLE THAT RELATES TO YOUR INVOCATION OF GCC)
GCOVR 文档明确指出您需要运行正确版本的 gcov.exe 才能使 gcovr 正常工作。不清楚的是,在 Jenkins 上将 Jenkins PATH 设置为正确的 gcov.exe 位置是不够的。