我正在使用 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 的输出中检查环境设置,似乎两者都非常接近。
关于缺少覆盖数据报告的原因的任何线索?太谢谢了 :-)