Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在groovy的Jenkins作业中修改Sonar jdk_Groovy_Jenkins_Sonarqube - Fatal编程技术网

在groovy的Jenkins作业中修改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

如何从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 (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)