SonarQube MSBuild扫描仪不会从分析中排除文件

Mar*_*ies 9 .net msbuild tfs sonarqube sonarqube-scan

我们目前正在使用SonarQube Scanner for VSTS/TFS 4.1.1(使用SonarQube Scanner 4.1.1).

我们想做什么:

对于我们解决方案中的某些项目(模块),我们希望从分析和代码覆盖率统计信息中排除文件.这应该通过使用文件模式而不是修改TFS构建任务以可维护的方式完成.

项目结构:

    |- Source
      |- ProjectA
        |- Scripts (should be excluded)
        |- OwnCode
      |- ProjectB
        |- Views (only code coverage should be excluded)
        |- Presenters
        |- ...
      |- ProjectC
        |- Scripts (should be scanned)
        |- ...
      |- ...
      |- Solution.sln
Run Code Online (Sandbox Code Playgroud)

我们尝试了什么:

  1. 排除在TFS构建任务中
    • 绝对路径(带反斜杠或斜杠):( sonar.exclusions="$(Build.SourcesDirectory)\Source\ProjectA\Scripts\**\*.js"类似于覆盖范围)
    • 相对路径: **/ProjectsA/Scripts/**/*.js
  2. 不包括在SonarQube前端
    • 分析排除: **/ProjectA/Scripts/**/*.js
    • 覆盖范围排除: **/ProjectB/Views/**/*.cs
  3. 不包括sonar-project.properties:
    • 不受支持并导致以下错误: sonar-project.properties files are not understood by the SonarScanner for MSBuild

我们看到了什么:

SonarQube Web界面中的扫描程序上下文的日志是:

  Settings for module: Solution:Solution:6FA7B5C2-667D-4387-98B9-445617F2AC0B
  - sonar.coverage.exclusions=**/ProjectA/Views/**/*.cs
  - sonar.cs.analyzer.projectOutPath=D:\agent1\_work\5\.sonarqube\out\9
  - sonar.cs.analyzer.projectOutPaths="D:\agent1\_work\5\.sonarqube\out\9"
  - sonar.cs.roslyn.reportFilePath=D:\agent1\_work\5\s\Source\Solution\Source\ProjectA\bin\Release\ProjectA.dll.RoslynCA.json
  - sonar.cs.roslyn.reportFilePaths="D:\agent1\_work\5\s\Source\Solution\Source\ProjectA\bin\Release\ProjectA.dll.RoslynCA.json"
  - sonar.exclusions=**/ProjectA/Scripts/**/*.js
  - sonar.moduleKey=Solution:Solution:6FA7B5C2-667D-4387-98B9-445617F2AC0B
  - sonar.projectBaseDir=D:\agent1\_work\5\s\Source\Solution\Source\ProjectA
  - sonar.projectKey=Solution:Solution:6FA7B5C2-667D-4387-98B9-445617F2AC0B
  - sonar.projectName=ProjectA
  - sonar.sourceEncoding=utf-8
  - sonar.sources="D:\agent1\_work\5\s\Source\Solution\Source\ProjectA\Scripts\abc.js","..."
Run Code Online (Sandbox Code Playgroud)

TFS构建中的MSBuild扫描程序的日志是:

Base dir: D:\agent1\_work\5\s\Source\Solution\Source\ProjectA
Working dir: D:\agent1\_work\5\.sonarqube\out\.sonar\Solution_Solution_6FA7B5C2-667D-4387-98B9-445617F2AC0B
Source paths: Scripts/abc.cs, ...
Source encoding: UTF-8, default locale: en_US
Index files
Excluded sources: 
  **/ProjectA/Scripts/**/*.js
172 files indexed
0 files ignored because of inclusion/exclusion patterns
Quality profile for cs: Sonar way
Quality profile for js: Sonar way
Excluded sources for coverage: 
  **/ProjectB/Views/**/*.cs
Sensor C# Properties [csharp]
Sensor C# Properties [csharp] (done) | time=15ms
Sensor SonarJavaXmlFileSensor [java]
Sensor SonarJavaXmlFileSensor [java] (done) | time=0ms
Sensor SonarJS [javascript]
Run Code Online (Sandbox Code Playgroud)

我们没试过的:

  • 通过更改项目文件来排除单个文件

我们不想这样做因为它不可维护.

  • 不包括整个项目

我们只想从解决方案中的单个项目中排除某些文件夹/模式.

dun*_*anp 5

部分答案:可以在SonarQube UI中的每个“组件”(即,每个MSBuild项目)配置代码覆盖率排除项,因此您应该能够从覆盖率中排除ProjectB \ View,但不能从分析中排除。

导航至组件页面,然后选择管理常规设置。“ 分析范围”选项卡中的“ 覆盖范围排除”属性仅为此组件设置排除范围

查找组件页面并不明显:单击SonarQube项目的“代码”选项卡。这将显示组件列表。单击屏幕上您感兴趣的组件旁边的最左侧的图标:

打开组件页面

组件页面看起来与整个项目页面相同,但是页面顶部的路径将同时显示项目和组件名称(在下图中用红色下划线标记):

组件页面