在Jenkins和Cobertura中显示带有源代码的代码覆盖范围(其他计算机的运行结果)

马雷克

背景

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

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

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

问题

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

资源

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

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

现在,我发现了这种有希望的SO answear

输出的xml文件必须与coverage运行位置在同一文件夹中,因此:

coverage xml -o coverage.xml

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

问题是:

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

我还尝试了什么

  1. 我确保任何人都可以阅读源代码(以避免访问问题)
  2. 我已经修改了xml,因此filename包含相对于以下路径:jenkins工作区,具有覆盖率报告的xml文件所在的路径
  3. 将我的源代码复制到各个位置,甚至包含“ cobertura”目录,因为我在插件源代码中找到了类似的内容
  4. 我已经尝试通过检查源代码来了解此问题。
  5. 我发现了一些(有点旧)的github项目,这也许是如何修复它的提示-目前,我正在努力研究它的确切功能(我不想将此项目导入到我的构建结构中)。

到目前为止没有运气。

更新:

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

马雷克

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

  1. xml fromopenCppCoverage是正确的。此处无需进行任何更改即可使其工作(只要源位于pdb文件所指向的位置即可)。Jenkins工作区之外的资源在这里不是问题。当我将可执行文件从构建计算机复制到测试计算机,然后使用运行测试openCppCoverage并将结果复制回构建计算机时,就很好了。

  2. 在作业配置中,任何应查看代码覆盖率的用户都必须有权访问Job/workspace安全性部分。就我而言,我已为所有登录用户启用了此功能。在此处输入图片说明这涵盖了错误消息的最后一个要点。

  3. 最重要的是:构建必须成功我的意思是表格从头到尾。不计量包含对cobertura插件的调用的步骤是否成功。如果任何步骤(甚至在将来的步骤中)失败,则cobertura将不会显示此覆盖运行的代码。在我的情况下,由于其中一项测试超时,因此构建工作失败。这是由openCppCoverage开销造成的,导致开销降低了因数3我的脚本正在检测超时并杀死其中一项测试。

我发现构建不成功是偶然的问题。在实验期间,我注意到cobertura显示源代码的两种情况:

  • 我已经重新执行工作,并删除了所有步骤,但其中一个步骤负责发布coloratura结果
  • 我以这样的方式运行整个工作:运行一个通过的测试用例

如果构建不成功,则不播种覆盖范围是合理的(如果测试失败,则很可能是错误的代码分支),但是UI应该以不同的方式表明这一点。

结论

这是一个很好的例子,向用户报告错误并提供准确的详细信息非常重要,出了什么问题以及原因。我至少浪费了全部精力来弄清楚实际出了什么问题,哪个错误消息实际上是我的情况。实际上,来自插件的错误消息并未涵盖不显示代码的所有原因。

我将报告该插件应给出更好的解释,以解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一台计算机上的OpenGL代码运行缓慢(但其他计算机上没有)

来自分类Dev

摆脱带有源代码的DLL?

来自分类Dev

如何将代码外包给其他计算机永久运行?

来自分类Dev

BeautifulSoup 返回空列表,而代码在其他计算机上完美运行

来自分类Dev

无法访问其他计算机的本地代码

来自分类Dev

无法访问其他计算机的本地代码

来自分类Dev

如何使Istanbul生成我所有源代码的覆盖范围?

来自分类Dev

Visual Studio SharePoint API代码可在其他计算机上运行,但不能在我的计算机上运行

来自分类Dev

奇怪的错误:相同的PHP代码,但在Mac和Windows计算机中结果不同

来自分类Dev

如何在Javascript中单击带有源代码的ElementByTagName img

来自分类Dev

Windows无法访问\\ [其他计算机]错误代码0x80004005

来自分类Dev

尝试在其他计算机上安装时出现错误代码91

来自分类Dev

在另一台计算机上运行的Python代码中的GLUT警告和GLUT致命错误

来自分类Dev

OpenCV结果在Debug / Release和其他计算机之间更改

来自分类Dev

在其他计算机上运行Qt应用

来自分类Dev

SCCM 2007集合查询,未经批准的带有特定站点代码的计算机

来自分类Dev

在云计算机上运行OpenCV代码[Azure]

来自分类Dev

如何在虚拟计算机上运行代码?

来自分类Dev

无法在计算机上运行 angularjs 代码

来自分类Dev

Mac:如何从其他计算机远程访问在Docker容器中运行的服务器?

来自分类Dev

如何列出从非域计算机运行代码的所有域中的用户?

来自分类Dev

在浏览器中显示带有时区的客户端计算机日期和时间

来自分类Dev

在ipython notebook中,如何实现隐藏所有源代码和编辑按钮的“单个单元格”样式?

来自分类Dev

在我的C#代码中,计算机是否继续运行直到输出完成?

来自分类Dev

C#识别代码是否在Windows Phone或平板电脑/计算机中运行

来自分类Dev

C 中的分段错误错误。代码在朋友的计算机上运行,但不是我的

来自分类Dev

具有语音识别功能的 Xcode 项目可在一台计算机上运行,但不能在其他计算机上运行

来自分类Dev

在哪里可以找到带有源代码的简约WDM驱动程序模板?

来自分类Dev

在哪里可以找到带有源代码的简约WDM驱动程序模板?

Related 相关文章

  1. 1

    一台计算机上的OpenGL代码运行缓慢(但其他计算机上没有)

  2. 2

    摆脱带有源代码的DLL?

  3. 3

    如何将代码外包给其他计算机永久运行?

  4. 4

    BeautifulSoup 返回空列表,而代码在其他计算机上完美运行

  5. 5

    无法访问其他计算机的本地代码

  6. 6

    无法访问其他计算机的本地代码

  7. 7

    如何使Istanbul生成我所有源代码的覆盖范围?

  8. 8

    Visual Studio SharePoint API代码可在其他计算机上运行,但不能在我的计算机上运行

  9. 9

    奇怪的错误:相同的PHP代码,但在Mac和Windows计算机中结果不同

  10. 10

    如何在Javascript中单击带有源代码的ElementByTagName img

  11. 11

    Windows无法访问\\ [其他计算机]错误代码0x80004005

  12. 12

    尝试在其他计算机上安装时出现错误代码91

  13. 13

    在另一台计算机上运行的Python代码中的GLUT警告和GLUT致命错误

  14. 14

    OpenCV结果在Debug / Release和其他计算机之间更改

  15. 15

    在其他计算机上运行Qt应用

  16. 16

    SCCM 2007集合查询,未经批准的带有特定站点代码的计算机

  17. 17

    在云计算机上运行OpenCV代码[Azure]

  18. 18

    如何在虚拟计算机上运行代码?

  19. 19

    无法在计算机上运行 angularjs 代码

  20. 20

    Mac:如何从其他计算机远程访问在Docker容器中运行的服务器?

  21. 21

    如何列出从非域计算机运行代码的所有域中的用户?

  22. 22

    在浏览器中显示带有时区的客户端计算机日期和时间

  23. 23

    在ipython notebook中,如何实现隐藏所有源代码和编辑按钮的“单个单元格”样式?

  24. 24

    在我的C#代码中,计算机是否继续运行直到输出完成?

  25. 25

    C#识别代码是否在Windows Phone或平板电脑/计算机中运行

  26. 26

    C 中的分段错误错误。代码在朋友的计算机上运行,但不是我的

  27. 27

    具有语音识别功能的 Xcode 项目可在一台计算机上运行,但不能在其他计算机上运行

  28. 28

    在哪里可以找到带有源代码的简约WDM驱动程序模板?

  29. 29

    在哪里可以找到带有源代码的简约WDM驱动程序模板?

热门标签

归档