尝试使用DSL脚本在Jenkins中创建多作业。
一个阶段中有多个作业,我想为下游作业中的多作业创建一个合并报告。
我正在使用复制工件将下游作业的结果复制到多作业的目标目录中。使用选择器-lastCompleted()
但是,我得到一个错误,提示提供方法和测试的多个扩展失败。显然,存在于copyArtifact和multijob插件中的lastCompleted()在这种情况下,我需要同时使用两者。
这是我的剧本:
multiJob('dailyMultiJob') {
concurrentBuild(true)
logRotator(-1, 10, -1, 10)
triggers {
cron('H H(0-4) * * 0-6')
}
steps {
phase('Smoke Tests'){
phaseJob('JobA')
phaseJob('JobB')
phaseJob('JobC')
}
copyArtifacts{
selector{
lastCompleted()
}
projectName('JobA')
filter('target/allure-results/*.*')
target('/path/to/this/multijob/workspace')
flatten(false)
}
copyArtifacts{
selector{
lastCompleted()
}
projectName('JobB')
filter('target/allure-results/*.*')
target('/path/to/this/multijob/workspace')
flatten(false)
}
copyArtifacts{
selector{
lastCompleted()
}
projectName('JobC')
filter('target/allure-results/*.*')
target('/path/to/this/multijob/workspace')
flatten(false)
}
}
publishers {
allure {
results {
resultsConfig {
path('target/allure-results')
}
}
}
archiveArtifacts {
pattern('target/reports/**/*.*')
pattern('target/allure-results/**/*.*')
allowEmpty(true)
}
}
}
运行gradle测试后得到以下错误
Caused by: javaposse.jobdsl.dsl.DslException: Found multiple extensions which provide method lastCompleted with arguments []: [[hudson.plugins.copyartifact.LastCompletedBuildSelector, com.tikal.jenkins.plugins.multijob.MultiJobBuildSelector]]
我不确定是否有办法表明使用特定工件的方法。
在这个问题上停留了很长时间。任何帮助都将受到高度赞赏。先感谢您!
答案 0 :(得分:1)
几个月前,我遇到了同样的问题。 有两种解决方案。
1-仅保留一个可避免冲突的插件。 (不建议这样做,因为它可能会破坏其他工作)
2-使用configure块修改xml文件,这将避免这种冲突,并且您可以保留多个支持相同扩展名的插件。 (推荐的解决方案)
谢谢
答案 1 :(得分:0)
最新更新: 我要做的是改为切换到脚本化管道作业。 实际上,并非要在所有要使用的方法上使用配置块,并且它们受设计的限制。我相信出于安全原因,某些插件也不允许使用它。
最好使用管道。