在我的 .Net 代码中,我有几个生成的类,我想将它们从针对每个拉取请求运行的 SonarQube 分析中排除。为了弄清楚排除是如何工作的,我尝试了两种方法来排除单个文件的分析
adres.cs
。
选项A
我在git仓库的根目录下添加了一个文件
sonar-project.properties
,其内容是:
sonar.projectKey=MyProjectKey
sonar.projectName=MyProjectName
sonar.exclusions=**/adres.cs
下面的 YAML 片段显示了如何调用 SonarQube 准备步骤(除了在这种情况下,
sonar.exclusions
在 YAML 文件中被注释掉)。
在构建服务器的输出中,我看到以下有趣的语句:
1 表示找到配置文件,2 表示文件已处理。然而,3 表明文件
adres.cs
仍在分析中,我通过在 SonarQube 中查看该文件仍然可见来确认这一点。
选项B
我修改了 YAML 构建管道以包含一个额外的行,用于指定要排除的文件,即下面代码片段的最后一行:
task: SonarQubePrepare@6
inputs:
SonarQube: 'SonarQubeOnDocker'
projectKey: MyProjectKey
projectName: MyProjectName
extraProperties: |
sonar.host.url=myUrl
sonar.exclusions=**/adres.cs #Only used in Option B
sonar.verbose=true
这些是我指定的属性,其余的使用默认值,根据文档意味着:
scannerMode: 'MSBuild'
运行修改后的管道后,该文件不再显示在 SonarQube 中。此外,许多地方的输出都指出排除的来源:**/adres.cs
知道为什么第二种方法有效但第一种方法无效吗?
更新
我将 YAML 任务定义修改为
task: SonarQubePrepare@6
inputs:
SonarQube: 'SonarQubeOnDocker'
projectKey: MyProjectKey
projectName: MyProjectName
configFile: 'sonar-project.properties'
extraProperties: |
sonar.host.url=myUrl
sonar.verbose=true
这还是不行。
解决方案
根据 Kevin Lu 的评论,我将 YAML 任务定义更新为
task: SonarQubePrepare@6
inputs:
SonarQube: 'SonarQubeOnDocker'
projectKey: MyProjectKey
projectName: MyProjectName
scannerMode: 'CLI'
configFile: 'sonar-project.properties'
extraProperties: |
sonar.host.url=myUrl
sonar.verbose=true
这里最重要的部分是
scannerMode
属性。当我将其设置为非默认值CLI
时,正在使用配置文件。
请参阅此票证:无法从 VSTS 管道中排除 sonar-project.properties 文件
源代码中已有的sonar-project.properties 文件与 Scanner for MSBuild 不兼容。原因是扫描仪会自己生成一个文件,其中包含所有源参考,以便能够由底层基础扫描仪进行分析。
问题的原因可能是 sonar-project.properties 与 MSBuild 模式不兼容。
要在sonarqube任务中使用sonar-project.properties,您可以更改为使用CLI模式。
在这种情况下,您可以在 configFile 字段中定义 sonar-project.properties 文件。
这是一个例子:
steps:
- task: SonarQubePrepare@6
displayName: 'Prepare analysis on SonarQube'
inputs:
SonarQube: xx
scannerMode: CLI
configMode: 'file'
configFile: 'sonar-project.properties'
extraProperties: |
xxxx
有关更多详细信息,您可以参考此文档:SonarQubePrepare@6 - 准备分析配置 v6 任务
configFile: 'sonar-project.properties' # 字符串。选修的。当 ScannerMode = CLI && configMode = file 时使用。设置文件。默认值:sonar-project.properties。