Jenkins 可以测试作业DSL脚本吗

Jenkins 可以测试作业DSL脚本吗,jenkins,jenkins-plugins,jenkins-job-dsl,Jenkins,Jenkins Plugins,Jenkins Job Dsl,理想情况下,在Jenkins上执行脚本之前,我希望能够通过某种单元测试来调用脚本 除了让jenkins运行一个作业DSL脚本,还有什么方法可以测试它吗?看看下面的例子。repo包含用于DSL脚本的测试。除了中的示例之外,您还可以更进一步,为单个文件或作业编写测试。例如,假设您的作业配置文件位于jobs/deployJob.groovy中 导入javaposse.jobdsl.dsl.DslScriptLoader 导入javaposse.jobdsl.dsl.MemoryJobManagemen

理想情况下,在Jenkins上执行脚本之前,我希望能够通过某种单元测试来调用脚本

除了让jenkins运行一个作业DSL脚本,还有什么方法可以测试它吗?

看看下面的例子。repo包含用于DSL脚本的测试。

除了中的示例之外,您还可以更进一步,为单个文件或作业编写测试。例如,假设您的作业配置文件位于jobs/deployJob.groovy中

导入javaposse.jobdsl.dsl.DslScriptLoader
导入javaposse.jobdsl.dsl.MemoryJobManagement
导入javaposse.jobdsl.dsl.ScriptRequest
导入spock.lang.Specification
类TestDeployJobs扩展了规范{
def“测试基本作业配置”(){
鉴于:
URL scriptURL=新文件('jobs').toURI().toURL()
ScriptRequest ScriptRequest=new ScriptRequest('deployJob.groovy',null,scriptURL)
MemoryJobManagement jobManagement=新的MemoryJobManagement()
什么时候:
DslScriptLoader.rundslnengine(脚本请求、作业管理)
然后:
jobManagement.savedConfigs.each{字符串名称,字符串xml->
使用(新的XmlParser().parse(新的StringReader(xml))){
//确保作业仅手动运行
触发器.hudson.triggers.TimerTrigger.spec.text().isEmpty()
//每次只部署一次每个环境
concurrentBuild.text()等于('false')
//进行工作区清理
buildWrappers.'hudson.plugins.ws\uu cleanup.PreBuildCleanup'
//确保屏蔽密码处于活动状态
!buildWrappers.com.michelin.cio.hudson.plugins.maskpasswords.MaskPasswordsBuildWrapper.isEmpty()
}
}
}
}

通过这种方式,您可以遍历每个XML节点,以确保设置了所有正确的值。

使用与中所述的Jenkins test harness相同的方法执行此操作,速度较慢,但使用自动生成的DSL时会产生语法错误,如中所述

按照说明设置代码后,您可以执行如下测试:

@Unroll
void 'check descriptions #file.name'(File file) {
    given:
    JobManagement jobManagement = new JenkinsJobManagement(System.out, [:], new File('.'))
    Jenkins jenkins = jenkinsRule.jenkins

    when:
    GeneratedItems items = new DslScriptLoader(jobManagement).runScript(file.text)

    then:
    if (!items.jobs.isEmpty()) {
        items.jobs.each { GeneratedJob generatedJob ->
            String text = getItemXml(generatedJob, jenkins)
            with(new XmlParser().parse(new StringReader(text))) {
                // Has some description
                !description.text().isEmpty()
            }
        }
    }

    where:
    file << TestUtil.getJobFiles()
}
@Unroll
作废“检查说明#文件名”(文件){
鉴于:
JobManagement JobManagement=new-JenkinsJobManagement(System.out,[:],新文件('.'))
詹金斯詹金斯=詹金斯规则。詹金斯
什么时候:
GeneratedItems=new DslScriptLoader(作业管理).runScript(file.text)
然后:
如果(!items.jobs.isEmpty()){
items.jobs.each{GeneratedJob GeneratedJob->
String text=getItemXml(generatedJob,jenkins)
使用(新的XmlParser().parse(新的StringReader(文本))){
//有一些描述
!description.text().isEmpty())
}
}
}
哪里:
文件