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

Posted

技术标签:

【中文标题】如何从解决方案的角度正确配置 SonarQube MSBuild Scanner?【英文标题】:How do I properly configure the SonarQube MSBuild Scanner from the solution's perspective? 【发布时间】:2018-06-15 17:54:21 【问题描述】:

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

首先,我在 Jenkins Groovy Pipeline 脚本中运行所有命令。 接下来,我试图不必枚举解决方案中的项目。通过使用 [1] 中描述的目标文件,我可以从我的解决方案文件夹运行 dotnet test。

由于 [2] 中描述的错误,我正在从 VSTest 适配器生成 TRX 输出并将其转换为通用测试数据格式 [4]。我正在使用我编写的 XSLT 将其转换(但主要基于我发现的 TRX 到 JUnit XSLT),如果您好奇,请参阅 [3]。

    https://gist.github.com/dasMulli/6fb5d1f507b886aeebaf27069f47f895 https://github.com/SonarSource/sonar-csharp/issues/886 https://gist.github.com/awesley/3118ba06282a7190400666c6c4e25e8d 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 的列表。理想情况下,这是可以避免的。

【问题讨论】:

您已将其标记为“c”。你是说标题中的 c# 吗? @G.Ann-SonarSourceTeam 当然可以。已更正。 【参考方案1】:

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

只记得在传递报告路径时使用sonar.testExecutionReportPaths

【讨论】:

以上是关于如何从解决方案的角度正确配置 SonarQube MSBuild Scanner?的主要内容,如果未能解决你的问题,请参考以下文章

代码质量管理工具:SonarQube常见的问题及正确解决方案

代码质量管理工具:SonarQube常见的问题及正确解决方案

如何仅针对特定规则扫描java文件?

代码质量管理工具:SonarQube常见的问题及正确解决方案

如何从已分析的排除文件中删除SonarQube上的问题?

如何正确配置属性“sonar.java.binaries”?