声纳:在一个项目中索引了 0 个文件,在另一个项目中正确扫描

Posted

技术标签:

【中文标题】声纳:在一个项目中索引了 0 个文件,在另一个项目中正确扫描【英文标题】:Sonar: 0 files indexed in one project, properly scanned in another 【发布时间】:2019-04-13 10:02:25 【问题描述】:

我有 2 个Jenkins shared libraries,其中包含要扫描的 groovy 文件。两个项目都使用 maven 使用相同的 sonarqube 调用,但在一个项目中扫描了 groovy 文件,而在另一个项目中则没有

Sonarqube 通话

...
    String scanCmd = "mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar " +
            "-f pom.xml " +
            "-Dsonar.branch=%GIT_BRANCH% " +
            "-Dsonar.test.inclusions=**/*Test*/** " +
            "-Dsonar.exclusions=**/*Test*/** " +
            "-Dsonar.skipDesign=true "

    bat scanCmd
...

如果重要的话,我们使用的是 5.6.6 版

声纳扫描仪配置

声纳配置在包含声纳属性的父 pom 中

....
   <properties>
        <!-- Sonar -->
        <sonar.sources>src,vars</sonar.sources>
        <sonar.inclusions>**/**</sonar.inclusions>
    </properties>
....

两个项目 (pom.xml) 都使用这个父 pom,即相同的声纳属性​​p>

项目 1:0 个文件编入索引

项目结构如下:

D:.
│   .gitignore
│   Jenkinsfile
│   pom.xml
│   README.md
│
├───src
│   └───ch
│       └───swisscard
│           └───jenkins
│               └───pipeline
│                   └───util
│                           PipelineRabbitMQ.groovy
│
└───vars
        ciPipeline.groovy

所以有两个 groovy 文件应该被扫描,但日志文件显示 0 个文件被索引:

[INFO] Base dir: D:\jenkins\tools\ci-home\workspace\rabbitmq-ci-pipeline_master-2CYM2JXOI6CJM2T4MSNQTNPWY7LRY7PTSC3OG74TSX2Q2WNKXUSQ
[INFO] Working dir: d:\jenkins\tools\ci-home\workspace\rabbitmq-ci-pipeline_master-2CYM2JXOI6CJM2T4MSNQTNPWY7LRY7PTSC3OG74TSX2Q2WNKXUSQ\target\sonar
[INFO] Source paths: src, vars
[INFO] Binary dirs: target/classes
[INFO] Source encoding: UTF-8, default locale: en_US_US
[INFO] Index files
[INFO] Included sources:
[INFO]   **/**
[INFO] Excluded sources:
[INFO]   **/target/**/*
[INFO]   **/*Test*/**
[INFO]   **/*Test*/**
[INFO] Included tests:
[INFO]   **/*Test*/**
[INFO] 0 files indexed
[INFO] 0 files ignored because of inclusion/exclusion patterns

项目 2:正确扫描文件

第二个项目结构如下:

D:.
│   .gitignore
│   Jenkinsfile
│   pom.xml
├───src
│   └───main
│       │   Utils.groovy
└───vars
        checkQualityGate.groovy
        defaultBuildApplication.groovy
        ciPipeline.groovy

这里的日志文件表明所有文件都被扫描了:

[INFO] Load server rules (done) | time=98ms
[INFO] Base dir: D:\jenkins\tools\ci-home\workspace\pipeline_feature_sonar-scan-D6GRAK5PLQOMGCOOH2T6QP6BP4LA6O3LP23UC7VBSSL3RORI4ZXQ
[INFO] Working dir: d:\jenkins\tools\ci-home\workspace\pipeline_feature_sonar-scan-D6GRAK5PLQOMGCOOH2T6QP6BP4LA6O3LP23UC7VBSSL3RORI4ZXQ\target\sonar
[INFO] Source paths: src, vars
[INFO] Source encoding: UTF-8, default locale: en_US_US
[INFO] Index files
[INFO] Included sources:
[INFO]   **/**
[INFO] Excluded sources:
[INFO]   **/target/**/*
[INFO]   **/*Test*/**
[INFO]   **/*Test*/**
[INFO] Included tests:
[INFO]   **/*Test*/**
[INFO] 5 files indexed
[INFO] 0 files ignored because of inclusion/exclusion patterns

问题/疑问

显然这两个项目具有相同的配置和相似的结构,但是一个被扫描而另一个未被扫描。目前我不明白为什么? 我检查了其他对我没有帮助的主题

我没有明确设置sonar.basedir,但根据日志,基本目录没问题

【问题讨论】:

上个时期发生了什么变化?你升级了一些插件吗?计划升级到最新的 LTS 版本:6.7.5。 目前还没有。我使用相同版本的声纳扫描仪和相同的声纳服务器在同一个 Jenkins 上运行这两个项目。已计划升级,但不会在未来几周内完成 请在调试模式下执行命令(-X)并添加更多日志(从扫描仪执行开始)。 我也有同样的问题,不知道怎么解决。 同样的问题,目前有解决方案吗? 【参考方案1】:

我的项目遇到了类似的问题。我在声纳属性中添加了sonar.scm.exclusions.disabled=true,文件被索引和扫描得很好。

【讨论】:

以上是关于声纳:在一个项目中索引了 0 个文件,在另一个项目中正确扫描的主要内容,如果未能解决你的问题,请参考以下文章

具有多个项目的声纳

声纳没有检查 Android 项目中的测试类

分支机构的项目分析(声纳报告)

mutiModule maven 项目的综合声纳报告

在 gradle 中排除声纳类

在竹子中配置声纳