Sonar runner在命令行中适用于.NET项目,但在Jenkins中报告缺少PDB

时间:2014-06-19 16:52:57

标签: .net jenkins sonarqube opencover

我使用Sonar和OpenCover收集使用Jenkins作为CI系统的C#项目的代码覆盖率信息。 Sobar服务器是v4.3,跑步者在测试机器上的版本是2.3。

棘手的部分是:当我从测试机器的命令行(Server 2008R2)运行sonar runner时,它与OpenCover完美配合,并在测试完成后收集覆盖数据。例如:

    14:31:36.479 INFO  - Committing...
    14:31:36.708 INFO  - Visited Classes 53 of 114 (46.49)
    14:31:36.710 INFO  - Visited Methods 193 of 427 (45.2)
    14:31:36.710 INFO  - Visited Points 1804 of 4024 (44.83)
    14:31:36.711 INFO  - Visited Branches 862 of 2012 (42.84)
    14:31:36.712 INFO  -

但是如果我将它设置为从Jenkins作业运行完全相同的命令,它仍然可以正确执行测试,但无法收集覆盖信息并抱怨丢失的PDB或错误的探查器配置:

    15:33:00.595 INFO  - Committing...
    15:33:00.879 INFO  - No results, this could be for a number of reasons. The most common reasons are:
    15:33:00.879 INFO  -     1) missing PDBs for the assemblies that match the filter         please review the
    15:33:00.879 INFO  -     output file and refer to the Usage guide (Usage.rtf) about filters.
    15:33:00.879 INFO  -     2) the profiler may not be registered correctly, please refer to the Usage
    15:33:00.879 INFO  -     guide and the -register switch.

然后,Sonar仪表板上的代码覆盖率报告为0%。

你们中的一些人可能已经经历过这种情况---它可能与某个地方的配置问题有关吗?我检查了SonarQube的网站,没有这样的信息;在网上冲浪,但很少有人谈到这一点,并认为这可能是Sonar的一个错误。

我最初的想法是,当我运行命令时,例如" SET JAVA_HOME = C:\ Program Files \ Java \ jre7& C:\ sonar_runner \ sonar-runner-2.3 \ bin \ sonar-runner.bat",它在我的帐户下;并通过Jenkins运行相同的命令,并且它在本地系统帐户下运行,因为它是由Jenkins Windows服务执行的。但是从Sonar-runner的输出中检查环境设置似乎都非常接近。

关于覆盖率数据丢失报告原因的任何线索?非常感谢: - )

1 个答案:

答案 0 :(得分:1)

如果是探查器DLL,则可能是注册问题。

您可以使用regsvr32手动注册它们,然后使用drop -register开关。构建服务器有时作为服务运行,这就是解决方案。

或者可能是被测试的组件被复制到另一个位置(隔离?)但是PDB不是-targetdir选项可以用来纠正它。

有关OpenCover的更多信息可以在我们安装的wiki https://github.com/OpenCover/opencover/wiki/Usage或提供的文档中找到(nuget / msi / zip)