如何从解决方案的角度正确配置 SonarQube MSBuild 扫描仪?



我正在配置 MSBuild 扫描程序以针对 C# 解决方案运行。 我也通过dotCover运行代码覆盖率,但它正在工作。 从根本上说,问题是 - 1。通用测试执行报告解析器认为路径不正确,并且 2.SonarQube 正在反复解析测试执行报告(这对我来说不太重要)。

  • 首先,我从 Jenkins Groovy Pipeline 脚本中运行所有命令。
  • 接下来,我尝试不必枚举解决方案中的项目。 通过使用 [1] 中所述的目标文件,我能够从解决方案文件夹运行 dotnet 测试。
  • 由于 [2] 中描述的错误,我正在从 VSTest 适配器生成 TRX 输出并将其转换为通用测试数据格式 [4]。 我正在用我写的 XSLT 转换它(但主要基于 TRX 到 JUnit XSLT 我发现),如果你好奇,请参阅 [3]。

    1. https://gist.github.com/dasMulli/6fb5d1f507b886aeebaf27069f47f895
    2. https://github.com/SonarSource/sonar-csharp/issues/886
    3. https://gist.github.com/awesley/3118ba06282a7190400666c6c4e25e8d
    4. https://docs.sonarqube.org/display/SONAR/Generic+Test+Data

我的解决方案结构类似于

(CWD from Jenkins' perspective) Source/
Source/my.Sln
Source/Proj1/Proj1.csproj
Source/Proj1.Tests/Proj1.Tests.csproj

这允许我运行一系列命令,如下所示:

SonarQube.Scanner.MSBuild.exe begin /d:sonar.testExecutionReportPaths=convertedXmlCommaDelimitedList
dotnet test Source/my.Sln -l trx
grep for trx files -> use xslt to generate convertedXml in the same dir, coupled to how convertedXmlCommaDelimitedList is generated
SonarQube.Scanner.MSBuild.exe end

我看到的具体错误是"忽略了 2 个未知文件的测试执行数据,包括:"。 无论路径是否绝对,都会发生。 在这里,我看到每个项目的"convertedXml"文件都被解析了,无论该文件是否属于正在后处理的项目。

我尝试了一些我在网上找到的东西,例如将我的"源"目录重命名为其他目录。 我担心我需要编写一个脚本,一次需要特定的csproj来解析,并且必须在我的解决方案中维护csproj的列表。 理想情况下,这是可以避免的。

如果您尝试将 trx 数据解析为通用测试数据以馈送 SonarCloud,您可以使用此 dotnet 工具: https://github.com/gmarokov/dotnet-trx2sonar

请记住在传递报表路径时使用sonar.testExecutionReportPaths

最新更新