Jenkins管道变量与节点范围

时间:2017-08-31 10:35:44

标签: variables jenkins groovy scope

对于我们的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
}

有没有办法让groovy变量具有定义的范围

node{
[VALID HERE -- also known in called functions]
}
[UNKNOWN HERE]

当为每个节点使用“def l_str_test”时,l_str_test在say()

中是未知的

我知道解决方法是在调用函数时传递变量。但实际上我必须传递给每个函数的许多变量会使代码看起来很难看。

1 个答案:

答案 0 :(得分:0)

您可以声明变量前置def。这里有一个示例在第二个echo步骤中失败:

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

node {
    echo "$var"
}