用于MSBuild的SonarQube扫描仪:排除

时间:2016-12-12 11:37:26

标签: sonarqube sonarqube-scan

在SonarQube运行器中,可以通过声纳项目属性中的sonar.exclusions属性管理排除的项目。这样我们就可以管理与代码库分开的构建配置。

我们正在从跑步者迁移到MSBuild的扫描程序,以便在我们的代码上运行FXCop规则。

将sonar-project.properties文件保留在项目的根文件夹中会导致“MSBuild.SonarQube.Runner.exe end”命令中出现异常。 SonarQube Scanner for MSBuild无法理解 sonar-project.properties文件。从以下文件夹中删除这些文件:[folder]

我现在可以看到的排除特定项目的唯一选项(实际上所有名称以.Test,.Tests,.Testing,.UnitTests等结尾的项目)似乎是在每个受影响的项目中向一个propertyGroup添加一个项目属性: <SonarQubeExclude>true</SonarQubeExclude> 与管理根级别(我们为jenkins所做的)或构建设置(我们目前在TeamCity中使用)中的设置相比,这很难维护,容易出错并且很麻烦。

还有其他选择吗?还是计划将来?

当调用项目文件夹时***。测试后,在将其添加到排除设置后仍会进行扫描。

[14:14:14][Step 12/23] INFO: -------------  Scan MyProject.Tests
[14:14:14][Step 12/23] INFO: Excluded sources for coverage: 
[14:14:14][Step 12/23] INFO:   **/*.Tests/**/*
[14:14:14][Step 12/23] INFO:   **/*.Test/**/*
[14:14:14][Step 12/23] INFO: Base dir: C:\SomeFolder\MyProject\Modules\MyProject.Tests
[14:14:14][Step 12/23] INFO: Working dir: C:\SomeFolder\MyProject\.sonarqube\out\.sonar\{Sonar_Project}_{some guid}
[14:14:14][Step 12/23] INFO: Test paths: [I removed some classes], Utils/SomeTests.cs, Enum/dummy.resx, app.config, Compression/TestData/data1.FRM, Compression/TestData/data1.zip, Compression/TestData/data1.Off.zip, packages.config
[14:14:14][Step 12/23] INFO: Source encoding: UTF-8, default locale: en_US
[14:14:14][Step 12/23] INFO: Index files
[14:14:15][Step 12/23] INFO: 45 files indexed
[14:14:15][Step 12/23] INFO: Quality profile for cs: [some profile]
[14:14:15][Step 12/23] INFO: Quality profile for vb: [some profile]

3 个答案:

答案 0 :(得分:1)

没有关于在分析参数中管理这些属性组的文档,因为很难做到正确。相反,您应该使用UI来管理排除项:管理&gt;一般设置&gt;分析范围

更多信息,see the docs

答案 1 :(得分:0)

对于那些感兴趣的人...一年多之后,我们没有找到替代方法,因此我们坚持以下变通方法,即在构建之前将一个小的powershell脚本添加到TeamCity构建步骤中,该脚本负责添加一个属性组以将项目从Sonar分析中排除到以Tests.csproj结尾的项目文件中:

$dir = "C:\Temp\ExcludeProjectsFromSonar"

Get-ChildItem $dir *Tests.csproj -recurse | 
% { 
   $root = [xml](gc $_.FullName);
   $project = $root.Project;

   $propertyGroup = $root.CreateElement("PropertyGroup", $project.NamespaceURI);
   $comment = $root.CreateComment("Exclude the project from analysis");
   $sonarExclude = $root.CreateElement("SonarQubeExclude", $project.NamespaceURI);
   $sonarExclude.InnerText = 'true';

   $propertyGroup.AppendChild($comment);   
   $propertyGroup.AppendChild($sonarExclude);
   $project.AppendChild($propertyGroup);

   $root.Save($_.FullName);
}

答案 2 :(得分:0)

为什么不执行以下操作:

  1. 将所有不需要Sonar的项目归为一个文件夹。
  2. 使用Directory.Build.props添加文件<SonarQubeExclude>true</SonarQubeExclude>
  3. 如果您的祖先文件夹中有此文件,请确保也导入该文件,以免失去构建功能。

自MSBuild 15(即VS 2017)开始工作

就是这样。