【问题标题】:Modify Sonar jdk in Jenkins job from groovy从 groovy 修改 Jenkins 作业中的 Sonar jdk
【发布时间】:2014-06-27 00:00:42
【问题描述】:

如何从 groovy 脚本中设置 jdk 版本以供 Sonar 在 Jenkins 作业配置中使用。我要求声纳 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"));
      }
    }
}

【问题讨论】:

  • 你确定你可以定义一个不同的JDK吗?我的意思是通过用户界面?当我查看 SonarPublisher 的来源时,似乎 getJdk() 只是委托给 Jenkins/Hudson 实例。这意味着您不能覆盖用于 Sonar 的 JDK。
  • 当访问配置页面并导航到声纳然后按高级按钮时,可以看到一个下拉菜单以设置使用的 JDK。

标签: groovy jenkins sonarqube


【解决方案1】:

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

【讨论】:

  • 这给了我:groovy.lang.GroovyRuntimeException: Could not find matching constructor for: 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)
【解决方案2】:

在最近的 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)
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2017-10-10
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多