配置块在迭代时从列表中获取最后一个参数

时间:2015-02-25 04:57:03

标签: groovy jenkins-plugins dsl

我尝试使用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>

1 个答案:

答案 0 :(得分:0)

您需要更改

for (item in list) {

list.each { -> item

或者在循环中使用变量来保留项目的本地副本。

由于评估的顺序,您只需在闭包中获取for循环的最后一个值(如您所见)

请参阅:http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope/