2017-10-12 151 views
0

我试图完全自动创建Jenkins。我使用groovy脚本获得了大部分设置。我最后的障碍是使用DSL创建工作。我能够通过创建使用XML的工作:Jenkins:使用DSL自动创建工作

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(...)替换为createPrjectFromDSL之类的东西?

我的问题是如何使用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 $ _run_closure1)values:[neo,neoconfig- DSL $ _run_closure1 @ 7d799f93] 可能的解决方案:运行(),运行(),任(),等待(),grep的(),转储()

+0

您可以创建一个项目,该项目将从远程仓库获取DSL作业并构建它们。 – Opal

+0

我认为是我寻找的东西。你能再详细一点吗?我的目标是使用工作DSL自动创建我所有的工作。 – Gerb

回答

1

詹金斯Job DSL插件提供准确,你似乎什么正在寻找:A(基于Groovy的)DSL来定义作业。

一个简单的工作定义如下所示:

def repo = 'DSL-Tutorial-1-Test' 
job(repo) { 
    scm { 
     git('git://github.com/quidryan/aws-sdk-test.git') 
    } 
    triggers { 
     scm('H/15 * * * *') 
    } 
    steps { 
     maven('-e clean test') 
    } 
} 

编辑:为了定义后自动启动这项工作,添加以下代码:

// automatically queue the job after the initial creation 
if (!jenkins.model.Jenkins.instance.getItemByFullName(repo)) { 
    queue(repo) 
} 

的设置的完整的例子,创建一个自引导码头容器可以在tknerr/jenkins-pipes-infra中找到。我正在使用(大部分)相同的方法here

+0

创建作业定义后,我将如何通过某些脚本执行此作业定义?我的目标是让容器在启动时完全配置Jenkins的所有作业定义。 – Gerb

+0

我已经更新了我的答案。非常有效的点:-) – StephenKing

+0

谢谢!这正是我所期待的。 – Gerb