我有大型C ++应用程序,具有复杂的目录结构。结构是如此之深,以至于代码存储库无法存储在Jenkins工作空间中,而是某个根目录,否则由于路径长度限制被破坏,构建会失败。
现在,由于在不同的环境中对应用程序进行了测试,因此测试应用程序将在不同的计算机上运行。应用程序和所有资源都被压缩并复制到测试计算机上,在该计算机上使用OpenCppCoverage
运行测试,因此生成了Cobertura xml。
现在,由于需要源代码来显示covarage结果,因此xml被复制回构建机器,然后提供给Jenkins Cobertura插件。
覆盖率报告仅显示模块或源代码的百分比结果。不显示代码内容,但是显示此错误消息:
来源
源代码不可用。一些可能的原因是:
- 这不是最新版本(为了节省磁盘空间,此插件仅保留最新版本的源代码。
- [Cobertura找到了源代码,但是没有提供足够的信息来定位源代码。
- Cobertura找不到源代码,因此此插件没有希望找到它。
- 您没有足够的权限来查看此文件。
现在我已经找到了很有前途的this SO answear:
输出的xml文件必须与
coverage
所在的文件夹相同运行,所以:coverage xml -o coverage.xml
将对源文件夹的引用放入
coverage.xml
,如果输出文件放在另一个文件夹中,对源文件夹不正确。
问题是:
[Cobertura] Publishing Cobertura coverage report... FATAL: Unable to find coverage results java.io.IOException: Expecting Ant GLOB pattern, but saw 'C:/build_coverage/Products/MyMagicProduct/Src/test/*Coverage.xml'. See http://ant.apache.org/manual/Types/fileset.html for syntax
这是xml结果的一部分(修改前:)>]
<?xml version="1.0" encoding="utf-8"?> <coverage line-rate="0.63669186741173223" branch-rate="0" complexity="0" branches-covered="0" branches-valid="0" timestamp="0" lines-covered="122029" lines-valid="191661" version="0"> <sources> <source>c:</source> <source>C:</source> </sources> <packages> <package name="C:\jenkins\workspace\MMP_coverage\MyMagicProduct\src\x64\Debug\MMPServer.exe" line-rate="0.63040511358728513" branch-rate="0" complexity="0"> <classes> <class name="AuditHandler.cpp" filename="build_coverage\Products\MyMagicProduct\Src\Common\AuditHandler.cpp" line-rate="0.92682926829268297" branch-rate="0" complexity="0"> <methods/> <lines> <line number="18" hits="1"/> <line number="19" hits="1"/> <line number="23" hits="1"/> <line number="25" hits="1"/> <line number="27" hits="1"/> .... </lines> </class> ....
最大的问题是,我不确定xml的位置是否确实存在问题,因为插件未报告尝试获取/查找相应源代码时遇到的问题的详细信息。 Cobertura的第二个子弹可能会解释问题,这完全令人困惑:
[Cobertura找到了源代码,但是没有提供足够的信息来定位源代码。
filename
包含相对于以下路径:jenkins工作区,具有覆盖率报告的xml文件所在的路径到目前为止没有运气。
突然(我不确定自己做了什么)对我的帐户有效。问题是它仅对我有效,所有其他用户都遇到相同的问题。这清楚地表明问题必须是安全性。
背景我有具有复杂目录结构的大型c ++应用程序。结构是如此之深,以至于代码存储库无法存储在Jenkins工作区中,而是某个根目录,否则将生成...
当我不得不为非常庞大的C ++客户端开发CI管道时,遇到了一个非常相似的问题。如果我避开Cobertura Plugin而改用HTML Publisher Plugin,则效果最佳。我遇到的主要问题还在于查找源文件。
OpenCppCoverage
结果转换为HTML好的,我已经找到了这个插件有问题的原因。