【问题标题】:SonarQube Scanner for MSBuild: exclusions适用于 MSBuild 的 SonarQube 扫描仪:排除项
【发布时间】:2017-04-27 06:25:47
【问题描述】:

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

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

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

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

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

项目文件夹调用***.Tests时,添加到排除设置后仍会扫描。

[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]

【问题讨论】:

    标签: sonarqube sonarqube-scan


    【解决方案1】:

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

    更多信息,see the docs

    【讨论】:

    • 当项目文件夹被调用***.Tests时,尽管有排除设置,它仍然被扫描。
    • 我在开头的帖子中添加了一些日志消息。
    • 很难做到正确,因为在分析参数中没有关于管理这些属性组的文档。
    【解决方案2】:

    对于那些感兴趣的人... 一年多之后,我们还没有找到替代方案,所以我们坚持以下解决方法,我们在构建之前添加到 TeamCity 构建步骤中的一个小型 powershell 脚本,它负责将属性组从 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);
    }
    

    【讨论】:

      【解决方案3】:

      为什么不做以下事情:

      1. 将您不希望使用 Sonar 的所有项目分组到一个文件夹下。
      2. 添加文件Directory.Build.props<SonarQubeExclude>true</SonarQubeExclude>
      3. 如果您在祖先文件夹中有此文件,请确保也将其导入,以免丢失构建功能。

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

      就是这样。

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 2017-04-27
        • 2017-08-28
        • 2018-07-04
        • 2023-03-11
        • 2017-03-24
        • 2018-03-17
        • 2019-02-09
        • 2017-08-17
        相关资源
        最近更新 更多