11

情况:

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

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

  1. Post Build Action "SonarQube analysis with maven" 但它已被弃用,所以我不想使用它
  2. 构建后步骤“执行 SonarQube 扫描仪”是推荐的方式。

问题:

如果我使用已弃用的 Post Build Action,则声纳项目配置的属性会自动从项目 pom.xml 派生。

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

您必须为“未知”定义以下强制性属性: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/项目中提供任何声纳特定信息,因为该项目不应该关心声纳。它应该只包含构建项目所需的信息。

4

2 回答 2

19

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

  • 在 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 Post-build Action for Maven analysis is deprecated.,它指的 是不再记录的旧的构建后操作。该警告之后的段落(在此答案中进行了总结)确实是推荐的程序。如果还不清楚,请在此处说明。

于 2016-04-27T09:15:33.417 回答
3

使用 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

于 2017-03-06T20:28:24.927 回答