在groovy的Jenkins作业中修改Sonar jdk
如何从groovy脚本设置jdk版本,以便Sonar在Jenkins作业配置中使用。我要求sonar jdk与通过maven构建的实际jdk不同。我已经成功地到达了可以检索Sonar使用的jdk版本的作业的阶段,但是找不到设置它的方法。有什么建议吗在groovy的Jenkins作业中修改Sonar jdk,groovy,jenkins,sonarqube,Groovy,Jenkins,Sonarqube,如何从groovy脚本设置jdk版本,以便Sonar在Jenkins作业配置中使用。我要求sonar jdk与通过maven构建的实际jdk不同。我已经成功地到达了可以检索Sonar使用的jdk版本的作业的阶段,但是找不到设置它的方法。有什么建议吗 import hudson.util.*; import hudson.tasks.Publisher; def h = Hudson.getInstance(); def projects = h.getProjects(); for (pro
import hudson.util.*;
import hudson.tasks.Publisher;
def h = Hudson.getInstance();
def projects = h.getProjects();
for (project in projects) {
def DescribableList<Publisher,Descriptor<Publisher>> publishers = project.getPublishersList();
for (publisher in publishers) {
def desc = publisher.getDescriptor();
if (desc.getId().equals("hudson.plugins.sonar.SonarPublisher")) {
println(publisher.getJDK());
//((hudson.plugins.sonar.SonarPublisher) publisher).setJDK(h.getJDK("Sun JDK 1.7.45"));
}
}
}
import hudson.util.*;
导入hudson.tasks.Publisher;
def h=Hudson.getInstance();
def projects=h.getProjects();
用于(项目中的项目){
def descripablelist publisher=project.getPublishersList();
for(发布者中的发布者){
def desc=publisher.getDescriptor();
if(desc.getId().equals(“hudson.plugins.sonar.SonarPublisher”)){
println(publisher.getJDK());
//setJDK(h.getJDK(“sunjdk1.7.45”);
}
}
}
由于发布服务器没有用于jdk的setter,您需要在作业的发布服务器中用新实例替换实际实例:
def jobs = Hudson.instance.getItems(AbstractProject.class)
jobs.each {
sonar = it.publishersList.get(hudson.plugins.sonar.SonarPublisher.class)
if(sonar){
newSonar = new hudson.plugins.sonar.SonarPublisher(
sonar.installationName,
sonar.branch,
sonar.language,
sonar.triggers,
sonar.jobAdditionalProperties,
sonar.mavenOpts,
sonar.mavenInstallationName,
sonar.rootPom,
"Oracle 1.8.0", //set your JDK name here
sonar.settings,
sonar.globalSettings,
sonar.usePrivateRepository)
it.publishersList.replace(newSonar)
}
}
在SonarPublisher的最新版本中(我使用的是SonarQube Scanner 2.8),您可以直接设置JDK,因此这对我来说很有用:
def jobs = Hudson.instance.getItems(AbstractProject.class)
jobs.each {
sonar = it.publishersList.get(hudson.plugins.sonar.SonarPublisher.class)
if(sonar) {
sonar.setJdk("jdk18") // set your JDK name here
it.publishersList.replace(sonar)
}
}
您确定可以定义不同的JDK吗?我是说通过用户界面?当我查看SonarPublisher的源代码时,似乎getJdk()只是委托给Jenkins/Hudson实例。这意味着您无法覆盖用于Sonar的JDK。当您访问confgiure页面并导航到Sonar,然后按advanced按钮时,可以看到一个下拉列表来设置使用的JDK。这给了我:
groovy.lang.GroovyRuntimeException:找不到匹配的构造函数:hudson.plugins.Sonar.SonarPublisher(null,java.lang.String,java.lang.String,null,java.lang.String,java.lang.String,null,java.lang.String,java.lang.String,jenkins.mvn.DefaultSettingsProvider,jenkins.mvn.DefaultGlobalSettingsProvider,java.lang.Boolean)