【问题标题】:Excluding directories from Sonar Qube scan in a multi module project in Jenkins without modifications to project在 Jenkins 的多模块项目中从 Sonar Qube 扫描中排除目录而不修改项目
【发布时间】:2017-06-02 22:48:51
【问题描述】:

我创建了一个执行 SONAR QUBE 分析的 Jenkins 作业。 我已将 SONAR 扫描添加为通用构建步骤。 我没有对项目进行任何修改以启用 SONAR 集成,因为该项目不必关心 SONAR。 (即 POM.xml 没有更改,也没有添加属性文件)

我的 SONAR 集成工作正常,项目不需要任何模块,这很棒。

但是,它是一个多模块项目,现在我想从扫描中排除其中一个模块,因为该模块包含自动生成的代码。 以下是我用来在 Jenkins 中触发 SONAR 扫描的 Maven 命令:

sonar:sonar
-Dsonar:host.url=http://url.com:9000/sonar
-Dsonar.login=myusername
-Dsonar.password=mypassword

这是我的项目结构:

    root
      Project A
      Project B
      Project C

我想从扫描中排除 ProjectB。

我尝试了-Dsonar.exclusions=/ProjectB,但没有成功。

这是日志的摘录:

[INFO] ------------- Scan Project B
[INFO] Base dir: /workspace/jenkins/…/workspace/CI-JOB-NAME/projectB
[INFO] Working dir: /workspace/jenkins/…/workspace/CI-JOB-NAME/projectB/target/sonar
[INFO] Source paths: pom.xml, src/main/java
[INFO] Binary dirs: target/classes
[INFO] Source encoding: UTF-8, default locale: en_US
[INFO] Index files
[INFO] Excluded sources: 
[INFO]   /projectB
[INFO] 44 files indexed
[INFO] 0 files ignored because of inclusion/exclusion patterns

如日志所示,excluded sources 属性已设置但无法正常工作,因为它说 0 个文件被忽略...

问题:如何从扫描中排除项目 B 目录中的所有内容? (最好在 Jenkins 作业中使用命令,不要向项目本身添加任何属性文件或其他修改)

“排除的源路径”是相对于“基本目录”路径还是根路径? 我应该将排除路径定义为绝对路径吗?

【问题讨论】:

    标签: maven jenkins sonarqube


    【解决方案1】:

    documentation 对此有专门的部分。 似乎适合您的情况的选项:

    • 使用构建配置文件排除某些模块(例如用于集成测试)
    • 使用Advanced Reactor Options(如-pl)。例如mvn sonar:sonar -pl !module2

    例如使用最后一个,你可以这样做:

    sonar:sonar -pl "!projectB"
    -Dsonar:host.url=http://url.com:9000/sonar
    -Dsonar.login=myusername
    -Dsonar.password=mypassword
    

    “排除的源路径”是相对于“基本目录”路径还是根目录?我应该将排除路径定义为绝对路径吗?

    根据documentation on exclusions, 模式是相对于基本目录的,所以不是绝对路径。 无论如何,我认为此选项对您的情况没有用, 因为在一个多模块的maven项目中, 子模块的文件使用相对于模块基目录的路径进行索引。所以像projectB/** 这样的模式不会匹配任何东西,因为projectB 不是使用的路径的一部分。如果你在模块中有一些独特的包名,比如someuniquepackage,位于src/main/java/someuniquepackage,那么src/main/java/someuniquepackage/** 模式就可以了。

    无论如何,我推荐上面的-pl 选项,或者使用 Maven 的配置文件功能。

    【讨论】:

    • 谢谢,问题解决了!我尝试使用 -pl 选项和建议的模式来定义排除路径,这两个选项都有效!
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 2017-11-20
    • 1970-01-01
    • 2019-03-21
    • 2019-11-28
    • 2021-02-27
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多