【问题标题】:Jenkins: Automate the creation of a job using DSLJenkins:使用 DSL 自动创建作业
【发布时间】:2017-10-12 17:49:35
【问题描述】:

我正在尝试完全自动化 Jenkins 的创建。我使用 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 来用 createPrjectFromDSL 之类的东西替换 createProjectFromXML(...)?

我的问题是如何使用 DSL 创建新工作?我已经完成了这部分工作,谢谢。

但是我的下一个问题是我应该把这个文件放在哪里,这样 Jenkins 才能在启动时创建作业?当我尝试将其复制到 /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) 值:[neo, neoconfig-dsl$_run_closure1@7d799f93] 可能的解决方案:run()、run()、any()、wait()、grep()、dump()

【问题讨论】:

  • 您可以创建一个项目,该项目将从远程仓库获取 DSL 作业并构建它们。
  • 我认为这是我正在寻找的东西。你能详细说明一下吗?我的目标是使用作业 DSL 自动创建所有作业。

标签: jenkins groovy automation


【解决方案1】:

Jenkins Job DSL 插件提供了您似乎正在寻找的东西:用于定义作业的(基于 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 中找到创建自引导 docker 容器的完整设置示例。我使用(大部分)相同的方法here。

【讨论】:

  • 一旦创建了作业定义,我将如何通过一些脚本来执行这个作业定义?我的目标是让一个容器在启动时使用我所有的作业定义来完全配置 Jenkins。
  • 谢谢!这正是我想要的。
  • 放到init.groovy.d文件夹下会生效吗? job-dsl-plugin 的文档暗示作业 DSL 代码应该在自己的作业中运行,这似乎只是在推动自动化(在我看来)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多