Jenkins:使用DSL自动创建作业

Jenkins:使用DSL自动创建作业,jenkins,groovy,automation,Jenkins,Groovy,Automation,我正试图完全自动化詹金斯的创作。我使用groovy脚本完成了大部分设置。我的最后一个障碍是使用DSL创建作业。我可以通过以下方式使用xml创建作业: import jenkins.model.* def jobName = "jobname" String configXml = new File('/jobname.xml').getText('UTF-8') def xmlStream = new ByteArrayInputStream( configXml.getBytes() ) J

我正试图完全自动化詹金斯的创作。我使用groovy脚本完成了大部分设置。我的最后一个障碍是使用DSL创建作业。我可以通过以下方式使用xml创建作业:

import jenkins.model.*

def jobName = "jobname"
String configXml = new File('/jobname.xml').getText('UTF-8')
def xmlStream = new ByteArrayInputStream( configXml.getBytes() )
Jenkins.instance.createProjectFromXML(jobName, xmlStream)
然而,XML文件很难维护,也不容易理解。所以我想切换到使用DSL语法,但我无法修复一个API来用createProjectFromXML(…)之类的东西替换CreateProjectFromDSL

我的问题是如何使用DSL创建新作业?我把这个部分搞定了,谢谢

然而,我的下一个问题是,我把这个文件放在哪里,这样詹金斯就可以在启动时创建作业了?当我尝试将其复制到/var/jenkins_home/init.groovy.d时,启动时会出现以下异常:

警告:无法运行脚本文件:/var/jenkins_home/init.groovy.d/neoconfig-dsl.groovy groovy.lang.MissingMethodException:方法:neoconfig dsl.job()的签名不适用于参数类型:(java.lang.String,neoconfig dsl$\u run\u closure1)值:[neo,neoconfig dsl$\u run_closure1@7d799f93] 可能的解决方案:run()、run()、any()、wait()、grep()、dump()

Jenkins插件正好提供了您想要的:一个(基于Groovy的)DSL来定义作业

简单的作业定义如下所示:

def repo='DSL-Tutorial-1-Test'
工作(回购){
供应链管理{
吉特('git://github.com/quidryan/aws-sdk-test.git')
}
触发{
scm(“H/15****”)
}
台阶{
maven(“-e清洁试验”)
}
}
编辑:要在定义后自动启动此作业,请添加以下代码:

//初始创建后自动将作业排队
if(!jenkins.model.jenkins.instance.getItemByFullName(repo)){
排队(回购)
}
可以在中找到创建自引导docker容器的完整设置示例。我使用(大部分)相同的方法。

Jenkins插件正好提供了您想要的:一个(基于Groovy的)DSL来定义作业

简单的作业定义如下所示:

def repo='DSL-Tutorial-1-Test'
工作(回购){
供应链管理{
吉特('git://github.com/quidryan/aws-sdk-test.git')
}
触发{
scm(“H/15****”)
}
台阶{
maven(“-e清洁试验”)
}
}
编辑:要在定义后自动启动此作业,请添加以下代码:

//初始创建后自动将作业排队
if(!jenkins.model.jenkins.instance.getItemByFullName(repo)){
排队(回购)
}

可以在中找到创建自引导docker容器的完整设置示例。我正在使用(大部分)相同的方法。

您可以创建一个项目,从远程回购获取DSL作业并构建它们。我想这是我正在寻找的东西。你能再详细一点吗?我的目标是使用作业DSL自动创建我的所有作业。你可以创建一个项目,从远程repo获取DSL作业并构建它们。我想这是我正在寻找的东西。你能再详细一点吗?我的目标是使用作业DSL自动创建所有作业。一旦创建了作业定义,我将如何通过一些脚本执行该作业定义?我的目标是让一个容器在启动时完全配置Jenkins和我的所有作业定义。谢谢!这正是我想要的。如果将它放在init.groovy.d文件夹中,会有效吗?docs for job dsl插件意味着job dsl代码应该在其自己的作业中运行,这似乎只是推动了自动化进程(在我看来)。一旦创建了作业定义,我将如何通过一些脚本执行该作业定义?我的目标是让一个容器在启动时完全配置Jenkins和我的所有作业定义。谢谢!这正是我想要的。如果将它放在init.groovy.d文件夹中,会有效吗?docs for job dsl插件意味着job dsl代码应该在其自己的作业中运行,这似乎只是推动了自动化进程(在我看来)。