繁体   English   中英

在其他Jenkins groovy脚本中使用groovy类

[英]Using a groovy class in other jenkins groovy scripts

我有4个groovy脚本(其中2个是dsl.groovy脚本):

JobConfig.groovy

class JobConfig {
    final name

    JobConfig(map) {
        name = map['name']
    }
}

topLevel.groovy

import JobConfig.*

def doSmthWithJobConfig(final JobConfig config) {
    println(config.name);
}

sublevel1.dsl.groovy

GroovyShell shell = new GroovyShell()
def topLevelScript = shell.parse(new File("topLevel.groovy"))

def jobConfigs = [
    new JobConfig(name: 'JenkinsTestDSLs'),
    new JobConfig(name: 'JenkinsTestDSLs2')
]

jobConfigs.each {
    topLevelScript.doSmthWithJobConfig(it);
}

sublevel2.dsl.groovy

GroovyShell shell = new GroovyShell()
def topLevelScript = shell.parse(new File("topLevel.groovy"))

def jobConfigs = [
    new JobConfig(name: 'JenkinsTestDSLs3'),
    new JobConfig(name: 'JenkinsTestDSLs4')
]

jobConfigs.each {
    topLevelScript.doSmthWithJobConfig(it);
}

现在,如果在本地我这样做:

groovyc JobConfig.groovy

,我在本地运行脚本没有任何问题。

但是在jenkins上,即使我在这些脚本所在的位置提供JobConfig.class,也无法使其运行。 在这里读到,只要JobConfig.groovy在CLASSPATH上,我就不需要进行任何编译。 我如何用詹金斯做到这一点? 还是有其他解决方案?

如果您不想编译groovy类,然后将已编译的类添加到类路径中,则可以在groovy脚本中使用如下类:

给定一个普通的班级

class GroovyClass {
    def GroovyClass(someParameter) {}

    def aMethod() {}
}

您可以像这样在groovy脚本中使用该类

import hudson.model.*
import java.io.File;
import jenkins.model.Jenkins;

def jenkinsRootDir = build.getEnvVars()["JENKINS_HOME"];
def parent = getClass().getClassLoader()
def loader = new GroovyClassLoader(parent)

def someParameterValue = "abc"

def groovyClass = loader.parseClass(new File(jenkinsRootDir + "/userContent/GroovyScripts/GroovyClass.groovy")).newInstance(someParameterValue)

groovyClass.aMethod()

我将要做的是,而不是尝试使其全部手动工作,我将创建maven项目或gradle一个项目并在结果项目中组织您的常规文件。 配置maven或gradle使其运行时。 一旦maven或gradle毫无问题地运行它,您就可以将其交给jenkins。

Jenkins肯定会接受Maven项目,而gradle则需要检查,但是可以肯定的是,Maven在本地运行您的groovy项目,它在Jenkins下也不会出现任何问题。

请尝试,让我知道。

暂无
暂无

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

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