【问题标题】:Scanning multi-language projects with SonarQube使用 SonarQube 扫描多语言项目
【发布时间】:2018-10-17 04:54:30
【问题描述】:

我正在尝试将 SonarQube (SonarCloud) 实施到我们的开发管道中。我们正在使用 TFS(本地),我们的项目只有一个存储库。在这个存储库中,我们有两个不同的应用程序,一个 .NET 应用程序和一个 javascript 应用程序。

文件夹结构是这样的:

|
|- NetProjectFolder
|- JSProjectFolder

我们的构建定义(与拉取请求一起使用)步骤如下:

  1. 用于 MSBuild 的 SonarQube 扫描仪 - 开始分析(用于 .NET 项目)
  2. Visual Studio Build(构建 .NET 项目解决方案)
  3. Visual Studio 测试(.NET 解决方案的测试)
  4. SonarQube Scanner CLI(扫描 JS 项目)
  5. 用于 MSBuild 的 SonarQuber 扫描仪 - 结束分析

我在想第 4 步和第 5 步将分析我们的 .NET 和 JS 项目,最后,我会看到我们所有项目的完整报告。但是,当第4步完成时,它会自动上传JS项目的报告,当第5步完成时,它会覆盖JS报告,上传.NET项目的报告。

最后,只有 .NET 项目的报告/警告/技术债务等。因为第 5 步覆盖了第 4 步的结果。

如何配置这些步骤,以便 SOnarQube 可以正确分析我们的 JS 和 .NET 项目?

【问题讨论】:

  • 我们在同一个 repo 和 AFAIK 上有许多带有 .cs 和 .js 代码的 MVC/WEBAPI 产品,您只需要一个扫描仪结束步骤。所有代码都将被评估。无需为每种平台类型单独创建一个,我们可以正确分析所有代码。
  • @Alex 感谢您的评论。所以你的意思是,只有正确配置的“SonarQube Scanner CLI”就足够了?或者您的意思是只有第 1 步和第 5 步就足够了?

标签: javascript c# sonarqube sonarqube-scan


【解决方案1】:

在撰写本文时,您看到的行为是“设计使然”,尽管它不是很直观。换句话说,您不能将 Scanner for MSBuild 和 Scanner CLI 链接起来。

仅当从当前分析的解决方案中的项目中引用 JavaScript 代码(以及所有其他语言)时,MSBuild 的扫描程序才能扫描它。例如,如果您的 WebApplication 项目包含 JS(或 TS、Java、COBOL 等)文件,则会对其进行分析。

当当前分析的解决方案中没有引用非.NET语言文件时,最好创建一个单独的SonarQube项目来存储来自Scanner CLI的分析结果。

我们知道此限制,并计划在不久的将来修复它,但目前我无法承诺具体日期。

【讨论】:

  • 您好 Valeri,感谢您的回答。作为项目的JS项目开发者,我不知道JS项目是否直接包含在.NET解决方案(.sln文件)中。 NET 项目由不同的团队开发。所以现在我只使用“SonarQube Scanner for MSBuild”步骤(已删除第 4 步)并将“JSProjectFolder”添加到 Scanner.Analysis.xml 文件的“包含”部分。看起来它现在也在扫描 JS 项目。
  • @Eray 据我所知,inclusions 过滤了sonar.sources 属性指定的文件。如果您能够通过inclusions 属性分析文件,则.NET 项目或者已经引用了这些文件,或者您手动设置了sonar.sources 属性。在使用 Scanner for MSBuild 进行分析时,执行后者可能会带来一些奇怪的行为,因为它也会设置该属性。我建议在使用 Scanner for MSBuild 时不要设置 sonar.sources
  • “SonarQube Scanner for MSBuild”步骤未将分析结果上传到 SonarQube。你有什么想法,为什么?
  • @Eray 可能有很多原因,我强烈建议打开一个新线程(不要用不同的问题污染这个线程,也可能会帮助其他人)并添加尽可能多的信息:错误、日志等。第一步是在Scanner for MSBuild的开始步骤中添加/D:sonar.verbose=true参数,然后您可以在这里上传日志:dropbox.com/request/CszJAO1ZNXFVl1gwo5hA我会尽快回复。
  • 您好 Valeri,由于我们的客户政策,无法共享完整日志。但我已经分享了分析的结束。大概就够了。我已经在详细模式下运行了扫描仪,我可以看到它正在扫描我所有的“.cs”和“.js”文件,正如我预期的那样。它只是没有将其发送到 SonarCloud。我在“后台任务”屏幕中看不到任何内容。
猜你喜欢
  • 2017-11-20
  • 1970-01-01
  • 2017-09-08
  • 2017-08-20
  • 2017-12-06
  • 2020-11-26
  • 1970-01-01
  • 2017-10-08
  • 2018-09-22
相关资源
最近更新 更多