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

Automatically derive mandatory SonarQube properties from pom file in Jenkins

情况:

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

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

  1. Post 生成操作 "SonarQube analysis with maven" 但它 已弃用 ,所以我不想使用它
  2. Post 构建步骤 "Execute SonarQube Scanner",是推荐的方式。

问题:

如果我使用已弃用的 Post 构建操作,声纳项目配置的属性会自动从项目 pom 派生。

如果我使用推荐的 Post 构建步骤,我收到异常

You must define the following mandatory properties for 'Unknown': sonar.projectKey, sonar.projectName, sonar.projectVersion, sonar.sources

不需要的解决方案:

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

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

我想要的

我想在 Jenkins 中使用推荐的 Post Build Step,而不需要为我的所有项目重新定义所有项目属性以使声纳满意。相反 sonar/jenkins/plugin/whatever 应该从我的 maven pom 文件中派生属性。我可以使用其他插件吗?我可以重新配置我的 Jenkins-Sonar-Plugin 吗?

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

The documentation(虽然有点混乱,见下面的编辑)解释了如何使用通用的 post-build 步骤(利用环境变量),而不是弃用的 post-build行动。简而言之:

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

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

编辑: 当the documentation says The Post-build Action for Maven analysis is deprecated. , it refers to the old post-build action which is not documented anymore. The paragraph after that warning (summarized in this answer) really is the recommended procedure. Illustration here还不清楚的时候。

使用 SonarQube Scanner 作为 post 构建步骤,您至少可以在 Analysis 属性中使用以下属性配置它:

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