Jenkins 可以测试作业DSL脚本吗
理想情况下,在Jenkins上执行脚本之前,我希望能够通过某种单元测试来调用脚本 除了让jenkins运行一个作业DSL脚本,还有什么方法可以测试它吗?看看下面的例子。repo包含用于DSL脚本的测试。除了中的示例之外,您还可以更进一步,为单个文件或作业编写测试。例如,假设您的作业配置文件位于jobs/deployJob.groovy中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
导入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())
}
}
}
哪里:
文件