SonarQube MSBuild 无法排除文件

Posted

技术标签:

【中文标题】SonarQube MSBuild 无法排除文件【英文标题】:SonarQube MSBuild fails to exclude files 【发布时间】:2018-07-19 00:35:29 【问题描述】:

我正在 debian 上使用 msbuild 运行分析,使用以下命令:

 mono /msbuild/SonarQube.Scanner.MSBuild.exe begin /d:sonar.login=<sonarqubetoken> /d:sonar.host.url=https://<my-server> /d:sonar.exclusions=test/**/* /k:<my-project-key>

但是end 命令中:

INFO: Index files
INFO: Excluded sources: 
INFO:   test/**/*
INFO: 17 files indexed
INFO: 0 files ignored because of inclusion/exclusion patterns
INFO: Quality profile for cs: Sonar way
INFO: Excluded sources for coverage: 
INFO:   test/**

我服务器的 UI 上的分析包括来自test/ 文件夹的文件。

为什么忽略特定文件失败?

使用SonarQube 6.7sonar-scanner:3.3

【问题讨论】:

LGTM。根目录中肯定是test/ 而不是tests/[space]test/ 你也在使用mono 所以区分大小写的文件系统? 路径和案例都是正确的......不知道发生了什么 【参考方案1】:

如您的尝试所示,很难从分析方面正确设置排除项。最好的办法是从 UI 设置这些。

【讨论】:

这不是很自动化或可扩展的。对于拥有大量软件的真实公司,我不会认为这是一个解决方案【参考方案2】:

我设法解决这种情况的唯一方法是将以下行添加到我想要排除的项目的 .csproj 文件中

<!-- Exclude the project from SonarQube analysis -->
<SonarQubeExclude>true</SonarQubeExclude>

【讨论】:

这对我不起作用。 SonarQube 仍在处理该项目。【参考方案3】:

升级到 MSBuild 4.0.2 的 SonarQube Scanner 后,我遇到了同样的问题

正如 pkaramol 所说,通过查看文档 [1,2] 这似乎是唯一的解决方案,因为 sonar.exclusions 仅匹配每个项目文件夹中的文件,而不是解决方案文件夹。我为我的 CI 编写了一个 python (>= 3.5) 脚本,它将这些行添加到我想要排除的项目中。

import os
import glob
import shutil

SOURCEDIR_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

SQ_EXCLUDE_TAG = """
    <PropertyGroup>
        <!-- Exclude the project from analysis -->
        <SonarQubeExclude>true</SonarQubeExclude>
    </PropertyGroup>
"""

def add_sq_exclude_tag(project_name):
    search_path = os.path.join(SOURCEDIR_PATH, '**', '.csproj'.format(project_name))
    for file_path in glob.iglob(search_path, recursive=True):
        with open(file_path, 'r', encoding='utf8') as outfile:
            lines = outfile.readlines()
            project_end_tag = lines[-1]
            lines[-1] = SQ_EXCLUDE_TAG
            lines.append(project_end_tag)
        with open(file_path, 'w', encoding='utf8') as outfile:
            outfile.writelines(lines)
        print('Added sonarqube exclude tag to '.format(file_path))


if __name__ == '__main__':
    add_sq_exclude_tag('*csprojFileConatainsThisString*')
    add_sq_exclude_tag('exactCsprojFileNameWithoutFileEnding')

【讨论】:

以上是关于SonarQube MSBuild 无法排除文件的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube MSBuild 集成失败:

MSBuild.SonarQube.Runner.Tool不分析.cs文件

带有 MsBuild 的 SonarQube:sonar.cs.analyzer.projectOutPaths 不会为此项目加载任何 protobuf 文件

使用 SonarQube Scanner for MSBuild 控制模块名称

只有 msbuild 14 或 msbuild 15 支持 SonarQube 分析

Sonarqube C# MsBuild 访问被拒绝