在 Jenkins Pipeline DSL 中迭代 groovy 列表
Iterating a groovy list in Jenkins Pipeline DSL
我的管道中有一个简单的 groovy 列表,其中添加了一些映射:
def componentList = []
def componentMapEntry1 = [:]
componentMapEntry1['componentName']="Dashboard_Core"
componentList << componentMapEntry1
def componentMapEntry2 = [:]
componentMapEntry2['componentName']="Dashboard_Equities"
componentList << componentMapEntry2
def cme3 = [:]
cme3["componentName"] = "home"
componentList << cme3
执行作业时,我验证大小
echo "size of list "+componentList.size()
...
[Pipeline] echo
size of list 3
我可以把它打印出来
println componentList
...
[Pipeline] echo
[{componentName=Dashboard_Core}, {componentName=Dashboard_Equities}, {componentName=home}]
我可以做一个 for 循环并迭代列表
for (i = 0; i <componentList.size(); i++) {
println componentList[i]
}
...
[Pipeline] echo
{componentName=Dashboard_Core}
[Pipeline] echo
{componentName=Dashboard_Equities}
[Pipeline] echo
{componentName=home}
到目前为止一切顺利。
当我尝试使用标准 groovy 迭代器时出现问题:
componentList.each {
println "adding "+it.componentName
}
在这种情况下我只得到第一个元素
[Pipeline] echo
adding Dashboard_Core
为什么我在这里只能得到第一个元素?我已经尝试过几次,并且使用 .each() 似乎只 return 第一个元素。当我在 groovy 命令行 运行 相同的代码时,它自然会 iterates as groovy would expect。 .each{ } 函数是否以某种方式被覆盖?
闭包上的 each
方法在流水线脚本中尚不可用。正在进行修复。同时使用 C 风格的 for
循环。
我的管道中有一个简单的 groovy 列表,其中添加了一些映射:
def componentList = []
def componentMapEntry1 = [:]
componentMapEntry1['componentName']="Dashboard_Core"
componentList << componentMapEntry1
def componentMapEntry2 = [:]
componentMapEntry2['componentName']="Dashboard_Equities"
componentList << componentMapEntry2
def cme3 = [:]
cme3["componentName"] = "home"
componentList << cme3
执行作业时,我验证大小
echo "size of list "+componentList.size()
...
[Pipeline] echo
size of list 3
我可以把它打印出来
println componentList
...
[Pipeline] echo
[{componentName=Dashboard_Core}, {componentName=Dashboard_Equities}, {componentName=home}]
我可以做一个 for 循环并迭代列表
for (i = 0; i <componentList.size(); i++) {
println componentList[i]
}
...
[Pipeline] echo
{componentName=Dashboard_Core}
[Pipeline] echo
{componentName=Dashboard_Equities}
[Pipeline] echo
{componentName=home}
到目前为止一切顺利。
当我尝试使用标准 groovy 迭代器时出现问题:
componentList.each {
println "adding "+it.componentName
}
在这种情况下我只得到第一个元素
[Pipeline] echo
adding Dashboard_Core
为什么我在这里只能得到第一个元素?我已经尝试过几次,并且使用 .each() 似乎只 return 第一个元素。当我在 groovy 命令行 运行 相同的代码时,它自然会 iterates as groovy would expect。 .each{ } 函数是否以某种方式被覆盖?
闭包上的 each
方法在流水线脚本中尚不可用。正在进行修复。同时使用 C 风格的 for
循环。