使用Cobertura在Jenkins中显示源代码覆盖率(来自其他计算机的运行结果)

问题描述 投票:5回答:2

背景

我有大型C ++应用程序,具有复杂的目录结构。结构是如此之深,以至于代码存储库无法存储在Jenkins工作空间中,而是某个根目录,否则由于路径长度限制被破坏,构建会失败。

现在,由于在不同的环境中对应用程序进行了测试,因此测试应用程序将在不同的计算机上运行。应用程序和所有资源都被压缩并复制到测试计算机上,在该计算机上使用OpenCppCoverage运行测试,因此生成了Cobertura xml。

现在,由于需要源代码来显示covarage结果,因此xml被复制回构建机器,然后提供给Jenkins Cobertura插件。

问题

覆盖率报告仅显示模块或源代码的百分比结果。不显示代码内容,但是显示此错误消息:

来源

源代码不可用。一些可能的原因是:

  • 这不是最新版本(为了节省磁盘空间,此插件仅保留最新版本的源代码。
  • [Cobertura找到了源代码,但是没有提供足够的信息来定位源代码。
  • Cobertura找不到源代码,因此此插件没有希望找到它。
  • 您没有足够的权限来查看此文件。

现在我已经找到了很有前途的this SO answear

输出的xml文件必须与coverage所在的文件夹相同运行,所以:

coverage xml -o coverage.xml

将对源文件夹的引用放入coverage.xml,如果输出文件放在另一个文件夹中,对源文件夹不正确。

问题是:

  • 我已经在另一台机器上运行测试(可以通过修改xml中路径的脚本来克服。)>
  • 我的源代码在构建期间不能在工作空间内
  • 将xml放置在源代码的相应目录中不被Cobertura插件接受。它以此错误结束:
[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找到了源代码,但是没有提供足够的信息来定位源代码。

我还尝试了什么
  1. 我已经确保任何人都可以阅读源代码(以避免访问问题)
  2. 我已经修改了xml,因此filename包含相对于以下路径:jenkins工作区,具有覆盖率报告的xml文件所在的路径

  • 将我的源代码复制到各个位置,甚至从something like this I've found in plugin source code起甚至包含“ cobertura”目录
  • 我已经尝试通过检查源代码来理解此问题。
  • 我发现了一些(有点旧)github project,这也许是修复它的提示-目前,我正在努力研究它的确切功能(我不想将此项目导入到我的构建结构中)。
  • 到目前为止没有运气。

    更新:

    突然(我不确定自己做了什么)对我的帐户有效。问题是它仅对我有效,所有其他用户都遇到相同的问题。这清楚地表明问题必须是安全性。

    背景我有具有复杂目录结构的大型c ++应用程序。结构是如此之深,以至于代码存储库无法存储在Jenkins工作区中,而是某个根目录,否则将生成...

    c++ jenkins code-coverage cobertura
    2个回答
    3
    投票

    当我不得不为非常庞大的C ++客户端开发CI管道时,遇到了一个非常相似的问题。如果我避开Cobertura Plugin而改用HTML Publisher Plugin,则效果最佳。我遇到的主要问题还在于查找源文件。

    1. OpenCppCoverage结果转换为HTML

    1
    投票

    好的,我已经找到了这个插件有问题的原因。

    © www.soinside.com 2019 - 2024. All rights reserved.