9

现状:自动派生从POM文件强制SonarQube性质詹金斯

我想分析一下我的项目,SonarQube(5.4)詹金斯(1.642.4)触发。这是一个用maven构建的java项目。

我看到两种方式来触发分析:

  1. 后生成行动“SonarQube分析行家”,但它过时,所以我不希望使用它
  2. 后生成步骤“执行SonarQube扫描仪“,是推荐的方法。

问题:

如果我使用已弃用后生成动作,声纳项目配置属性将自动从项目POM的。

它我使用推荐后生成步骤,我收到异常

您必须定义为“未知”以下强制属性:sonar.projectKey,sonar.projectName,sonar.projectVersion,sonar.sources

不希望的解决方案

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

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

我想

我想推荐使用的后生成步骤在詹金斯,无需重新定义我的所有项目,使声纳高兴所有项目属性。相反,sonar/jenkins/plugin /任何应该从我的maven pom文件中派生出属性。有没有额外的插件可以使用?我可以重新配置Jenkins-Sonar-Plugin吗?

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

回答

15

The documentation(虽然稍有混淆,请参阅下面的编辑)解释了如何使用通用的构建后步骤(利用环境变量),而不是使用过时的构建后操作。总之:

  • 安装最新的SonarQube插件(v2。4,截至目前)在詹金斯
  • 在系统配置
  • 下SonarQube服务器:在你的Maven项目的配置检查Enable injection of SonarQube server configuration as build environment variables
    • 检查Prepare SonarQube Scanner environment
    • 添加一个生成后步骤Invoke top-level Maven targets并利用

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

      :在 Goals领域如注入环境变量

编辑:当the documentationThe Post-build Action for Maven analysis is deprecated.,它指的是旧后建行动它不再被记录在案。该警告之后的段落(在此答案中总结)确实是推荐的程序。插图here如果它仍然不清楚。

+1

感谢您的解答,但在链接的文档中,您可以看到以下文本:“Maven分析的后生成操作已弃用。Maven分析的生成后操作已弃用。”不幸的是,这个解决方案不符合我的要求。 –

+1

您误解了文档:已过时的是生成后**操作**。在我的回答和文档(警告下面)中描述的是使用标准Maven构建步骤(和环境变量注入)的推荐方法。见[插图](http://i68.tinypic.com/x4er8y.png)。 –

+0

你说得对。这个Maven目标是作为构建后阶段执行的。因此,弃用并未提及该解决方案。我将删除我的答案,因为正如你所说,由于没有自动化的项目结构用法,这是一个坏主意。非常感谢 –

1

使用SonarQube扫描仪作为一个后生成步骤中,您可以在分析的属性至少这个属性来配置它:

sonar.projectKey=${POM_ARTIFACTID} 
sonar.projectName=${POM_DISPLAYNAME} 
sonar.projectVersion=${POM_VERSION} 
sonar.sources=src 
sonar.java.binaries=target 
sonar.language=java 
sonar.sourceEncoding=UTF-8 

POM_ *变量詹金斯从Maven的GAV信息映射,请看这里:https://github.com/jenkinsci/jenkins/pull/933/files