从 Jenkins 的 pom 文件中自动派生强制性 SonarQube 属性
Posted
技术标签:
【中文标题】从 Jenkins 的 pom 文件中自动派生强制性 SonarQube 属性【英文标题】:Automatically derive mandatory SonarQube properties from pom file in Jenkins 【发布时间】:2016-08-21 10:06:21 【问题描述】:情况:
我想用 Jenkins (1.642.4) 触发的 SonarQube (5.4) 分析我的项目。这是一个使用 maven 构建的 java 项目。
我看到了两种触发分析的方法:
-
构建后操作“使用 maven 进行 SonarQube 分析”,但它已弃用,所以我不想使用它
构建后步骤“执行 SonarQube 扫描仪”是推荐的方式。
问题:
如果我使用已弃用的 Post Build Action,声纳项目配置的属性会自动从项目 pom 派生。
如果我使用推荐的后期构建步骤,我会收到异常
您必须为“未知”定义以下强制属性:sonar.projectKey、sonar.projectName、sonar.projectVersion、sonar.sources
不需要的解决方案:
解决方案是通过 java 项目中的 sonar-project.properties 文件或通过 Jenkins 步骤中的参数提供所需的属性。
恕我直言:这是重复。所有相关信息都在 Maven pom 中定义:projectKey 可以从 artifactId 派生,projectName 和 projectVerstion 在 maven 中是相同的属性。特别是 projectVersion 至关重要。我不想在每次发布后更新项目版本(或者在发布插件中编写一些代码来自动更新)。
我想要什么
我想在 Jenkins 中使用推荐的构建后步骤,而不为我的所有项目重新定义所有项目属性以使声纳满意。相反 sonar/jenkins/plugin/whatever 应该从我的 maven pom 文件中派生属性。我可以使用其他插件吗?我可以重新配置我的 Jenkins-Sonar-Plugin 吗?
我不想在我的 pom/项目中提供任何声纳特定信息,因为该项目不应该关心声纳。它应该只包含构建项目所需的信息。
【问题讨论】:
【参考方案1】:The documentation(虽然有点混乱,请参阅下面的编辑)解释了如何使用通用的构建后步骤(利用环境变量),而不是弃用的构建后操作。简而言之:
在 Jenkins 中安装最新的 SonarQube 插件(目前为 v2.4) 在 SonarQube 服务器下的系统配置中:检查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 documentation 说 The Post-build Action for Maven analysis is deprecated.
时,它指的是旧的构建后 action 不再记录。该警告之后的段落(在此答案中进行了总结)确实是推荐的程序。图here如果还不清楚的话。
【讨论】:
感谢您的回答,但在链接的文档中,您可以看到以下文本:“不推荐使用 Maven 分析的构建后操作。不推荐使用 Maven 分析的构建后操作。”很遗憾,这个解决方案不符合我的要求。 您误解了文档:不推荐使用的是 Post-Build Action。我的回答和文档(警告下方)中描述的是使用标准 Maven 构建步骤(和环境变量注入)的推荐方法。看到这个illustration。 你是对的。这个 maven 目标作为构建后的 STEP 执行。因此,弃用不涉及该解决方案。我将删除我的答案,因为正如您所说,由于不是自动化的项目结构使用,这是一个坏主意。非常感谢【参考方案2】:使用 SonarQube Scanner 作为构建后步骤,您可以在分析属性中至少使用以下属性对其进行配置:
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_* 变量由 Jenkins 从 Maven GAV 信息映射,看这里:https://github.com/jenkinsci/jenkins/pull/933/files
【讨论】:
以上是关于从 Jenkins 的 pom 文件中自动派生强制性 SonarQube 属性的主要内容,如果未能解决你的问题,请参考以下文章
从Maven pom.xml更新sonar-project.properties文件中的特定属性?
Webdriver+testNG+ReportNG+Maven+SVN+Jenkins自动化测试框架的pom.xml配置