2017-08-31 75 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