2017-08-31 73 views
1

對於我們的jenkins管道環境,我們正在實現一個函數庫。 我們想在多個節點上使用這個庫。對於某些日誌記錄功能,我正在尋找一種具有「節點範圍」變量的方法。Jenkins管道變量,節點範圍

這意味着庫功能(在最小的例子下面說())應該具有取決於所述節點

g_str_test = "test" 

parallel firstBranch: { 
    node { 
     echo g_str_test // = test 
     l_str_test = "para1" 
     echo l_str_test 
     sleep 2 
     l_str_test = "paraaaa11" 
     g_str_test = "para1" 
     say() // = paraaaa11 

    } 
}, secondBranch: { 
    node { 
     echo g_str_test 
     l_str_test = "para2" 
     echo l_str_test // = para2 
     sleep 5 
     echo "l: "+l_str_test // should be para2 !!!!!! (but is paraaaa11) 
     echo "g: "+g_str_test //= para1 
     say() // = para2 !!!!!! 
    } 
}, 
failFast: true 

def say(){ 
    echo "say: "+l_str_test 
} 

上的不同的輸出是有辦法有常規變量具有限定的範圍

當使用「DEF l_str_test」爲l_str_test未在發言權()已知每個節點
node{ 
[VALID HERE -- also known in called functions] 
} 
[UNKNOWN HERE] 

我知道一個解決辦法是在調用噸時只通過可變他的功能。但實際上,我必須將許多變量傳遞給每個函數,這會使代碼看起來非常難看。

回答

0

您可以聲明變量前置def。這裏有一個例子未能在第二echo步:使用我已經嘗試了高清

node { 
    def var = 'hello' 
    echo "$var" 
} 

node { 
    echo "$var" 
} 
+0

。問題在於,它不能在節點內部調用的函數中工作(不是沒有傳遞變量) – Ditschi