繁体   English   中英

从Groovy修改Jenkins工作中的Sonar JDK

[英]Modify Sonar jdk in Jenkins job from groovy

如何从Groovy脚本中为Sonar设置jdk版本,以使其在Jenkins作业配置中使用。 我要求声纳jdk与用于通过maven构建的作业实际jdk不同。 我已经设法进入可以检索Sonar使用的Jobs 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"));
      }
    }
}

由于SonarPublisher没有jdk的设置器,因此您需要用作业发布者中的新实例替换实际实例:

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)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM