gpt4 book ai didi

jenkins - 在其他 jenkins groovy 脚本中使用 groovy 类

转载 作者:行者123 更新时间:2023-12-04 08:49:14 25 4
gpt4 key购买 nike

我有 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,我也无法让它运行。我读了 here只要 JobConfig.groovy 在 CLASSPATH 上,我就不需要进行任何编译。我如何用 Jenkins 做到这一点?或者还有其他解决方案吗?

最佳答案

如果您不想编译 groovy 类,然后将编译后的类添加到类路径中,您可以使用 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()

关于jenkins - 在其他 jenkins groovy 脚本中使用 groovy 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com