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

des*_*pot 8 groovy jenkins jenkins-plugins jenkins-groovy

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

JobConfig.groovy:

class JobConfig {
    final name

    JobConfig(map) {
        name = map['name']
    }
}
Run Code Online (Sandbox Code Playgroud)

topLevel.groovy:

import JobConfig.*

def doSmthWithJobConfig(final JobConfig config) {
    println(config.name);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我在当地做:

groovyc JobConfig.groovy
Run Code Online (Sandbox Code Playgroud)

,我没有在本地运行脚本的问题.

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

MeI*_*eIr 0

我要做的是,我不会尝试手动完成所有工作,而是创建 Maven 项目或 gradle 项目并在结果项目中组织您的 groovy 文件。当配置maven或gradle来运行它时。一旦maven或gradle运行没有任何问题,你就可以把它交给jenkins。

Jenkins 肯定会接受 Maven 项目,对于 gradle,你必须检查一下,但是可以肯定的是,maven 在本地运行你的常规项目,它在 Jenkins 下运行也不会出现任何问题。

请尝试一下,让我知道。