情况:
我想用Jenkins(1.642.4)触发的SonarQube(5.4)分析我的项目。这是一个用maven构建的java项目。
我看到两种触发分析的方法:
问题:
如果我使用弃用的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 /项目中提供任何声纳特定信息,因为该项目不应该关心声纳。它应该只包含构建项目所需的信息。
答案 0 :(得分:17)
The documentation(虽然稍有混淆,请参阅下面的编辑)解释了如何使用通用的构建后步骤(利用环境变量),而不是弃用的后构建操作。简而言之:
var keysJustInFirst = dict1.Keys.Except(dict2.Keys);
var keysJustInSecond = dict2.Keys.Except(dict1.Keys);
var commonKeys = dict1.Keys.Intersect(dict2.Keys);
var scores = [
{person_id: "1", score_math: 9, score_biology: 9, score_chemistry: 9},
{person_id: "2", score_math: 9, score_biology: 8, score_chemistry: 9}
];
var persons = [
{person_id: "1", person_name: "Bob", home_country: "Wakerly", age: 12},
{person_id: "2", person_name: "Arnie", home_country: "Templeton", age: 15},
{person_id: "3", person_name: "Steve", home_country: "Elberon", age: 10}
];
//Function used in the .filter method. 'this' object is actually the person_id
function getScoreByPersonId(score){
return score.person_id == this;
}
//Basic students implementations. You can enrich the structure of the 'item' object depending on your requirements.
var students = persons.map(function(p){
var item = {};
item['person'] = p;
item['score'] = scores.filter(getScoreByPersonId, p.person_id)[0] || {};
return item;
});
Enable injection of SonarQube server configuration as build environment variables
并利用Prepare SonarQube Scanner environment
字段中注入的环境变量,例如:
$ SONAR_MAVEN_GOAL -Dsonar.host.url = $ SONAR_HOST_URL -Dsonar.login = $ SONAR_AUTH_TOKEN
修改:当the documentation说Invoke top-level Maven targets
时,它指的是旧的构建后操作,不再记录。该警告之后的段落(在本回答中总结)确实是推荐的程序。插图here如果仍然不清楚。
答案 1 :(得分:2)
使用SonarQube扫描仪作为后期构建步骤,您可以在Analysis属性中至少使用此属性对其进行配置:
What is an average duck’s shoe size?
6
6? How do you know?
I know
I know? Ineresting!
POM _ * 变量由Jenkins从Maven GAV信息中映射,请看这里:https://github.com/jenkinsci/jenkins/pull/933/files