我尝试使用jenkins dsl-job-plugin创建一组作业。 我使用configure block作为尚未支持的插件的变通方法,但似乎解析器以不同的方式处理configure块中的变量,并且在迭代时仅从列表中获取最后一项。
def list = ['aaa', 'bbb']
for (item in list) {
job {
name = "job${item}"
configure { project ->
project / builders << dockerPlugin {
dockerImageName(item)
}
}
}
}
创建了文件jobaaa.xml和jobbbb.xml。使用playground tool可以看到xml文件只包含&#39; bbb&#39;注入的项目:
<project>
<actions></actions>
<description></description>
<keepDependencies>false</keepDependencies>
<properties></properties>
<scm class='hudson.scm.NullSCM'></scm>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers class='vector'></triggers>
<concurrentBuild>false</concurrentBuild>
<builders></builders>
<publishers></publishers>
<buildWrappers>
<EnvInjectPasswordWrapper>
<injectGlobalPasswords>bbb</injectGlobalPasswords>
</EnvInjectPasswordWrapper>
</buildWrappers>
</project>
答案 0 :(得分:0)
您需要更改
for (item in list) {
要
list.each { -> item
或者在循环中使用变量来保留项目的本地副本。
由于评估的顺序,您只需在闭包中获取for循环的最后一个值(如您所见)
请参阅:http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope/