从Jenkins中的pom文件自动派生强制SonarQube属性

Ser*_*fel 11 continuous-integration maven jenkins sonarqube sonarqube-scan

情况:

我想用Jenkins(1.642.4)触发的SonarQube(5.4)分析我的项目.这是一个用maven构建的java项目.

我看到两种触发分析的方法:

  1. Post Build Action"使用maven进行SonarQube分析",但它已被弃用,因此我不想使用它
  2. 建立后步骤"执行SonarQube扫描仪"是推荐的方法.

问题:

如果我使用已弃用的Post Build Action,声纳项目配置的属性将从项目pom中自动导出.

我使用推荐的Post Build Step,我收到了Exception

您必须为"未知"定义以下必需属性:sonar.projectKey,sonar.projectName,sonar.projectVersion,sonar.sources

不受欢迎的解决方案:

解决方案是通过java项目中的sonar-project.properties文件或通过Jenkins步骤中的参数提供所需的属性.

恕我直言:这是重复.所有相关信息都在Maven pom中定义:projectKey可以从artifactId派生,projectName和projectVerstion在maven中是相同的属性.特别是项目版本至关重要.我不想在每次发布后更新项目版本(或者在发布插件中编写一些代码来自动更新它).

我想要的是

我想在Jenkins中使用推荐的Post Build Step,而不需要为我的所有项目重新定义所有项目属性以使声纳高兴.相反,sonar/jenkins/plugin /应该从我的maven pom文件中获取属性.我可以使用额外的插件吗?我可以重新配置我的Jenkins-Sonar-Plugin吗?

我不想在我的pom /项目中提供任何声纳特定信息,因为该项目不应该关心声纳.它应该只包含构建项目所需的信息.

Nic*_*eam 18

文档(尽管有点混乱,请参见下面的编辑)解释了如何使用通用的构建后步骤(利用环境变量),而不是弃用的后构建操作.简而言之:

  • 在Jenkins安装最新的SonarQube插件(截至目前为v2.4)
  • 在SonarQube服务器下的System Config中:检查 Enable injection of SonarQube server configuration as build environment variables
  • 在Maven项目的配置中:
    • 校验 Prepare SonarQube Scanner environment
    • 添加一个构建后的步骤Invoke top-level Maven targets并利用Goals字段中注入的环境变量,例如:

      $ SONAR_MAVEN_GOAL -Dsonar.host.url = $ SONAR_HOST_URL -Dsonar.login = $ SONAR_AUTH_TOKEN

编辑:当文档说明时The Post-build Action for Maven analysis is deprecated.,它指的是旧的后构建操作 ,不再记录.该警告之后的段落(在本回答中总结)确实是推荐的程序.这里的插图如果还不清楚的话.