2016-04-01 39 views
3

私はいくつかのマップを追加し、私のパイプラインでシンプルなグルーヴィーなリストがあります:反復処理グルーヴィーリスト

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} 

これまでのところ、すべてがうまくです。私は最初の要素だけ

[Pipeline] echo 
adding Dashboard_Core 

を取得この場合

componentList.each { 
    println "adding "+it.componentName 
} 

なぜ私はここに最初の要素になるだろう:

問題は、私は、標準のグルーヴィーなイテレータを使用しようとしていますか?私はこれを数回試して、.each()を使うと最初の要素だけを返すようです。 Groovyコマンドラインで同じコードを実行すると、当然iterates as groovy would expectとなります。 .each {}関数は何とか上書きされますか?

+0

私は疑問に思っています: '[[componentName: 'Dashboard_Core']、[componentName: 'Dashboard_Equities']、[componentName: 'home']] each {println" $ it.componentName "}'期待どおりに働く? '['Dashboard_Core'、 'Dashboard_Equities'、 'home']はどうですか?{{componentName:it}} .each {println" $ it.componentName "}'を追加しますか? –

+0

最初のものはありません、それは私のように最初の要素だけを示しています。 サンドボックス環境で2番目のものが失敗します。 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:未分類のフィールドjava.util.LinkedHashMap $ Entryコンポーネント名 – Neil

+0

サーバー上のGroovyのバージョンは何年ですか?私のお金は古代のものです... –

答えて

6

クロージャのeachメソッドは、パイプラインスクリプトではまだ機能しません。修正が進行中です。一方、Cスタイルのforループを使用してください。

+0

または作成する別の方法とそれを@NonCPS – Rik

+1

問題はまだ動作していません(パイプラインプラグイン2.4)。この問題がいつ修正されるかは誰にも知られていますか? –