【问题标题】:Jenkins Pipeline variable with node scope具有节点范围的 Jenkins 管道变量
【发布时间】:2018-02-09 06:52:29
【问题描述】:

对于我们的 jenkins 管道环境,我们正在实现一个函数库。 我们想在多个节点上使用这个库。对于某些日志记录功能,我正在寻找一种具有“节点范围”的变量的方法。

这意味着库函数(在下面的最小示例中 say())应该根据节点有不同的输出

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() 中是未知的

我知道一个解决方案是在调用函数时只传递变量。但实际上,我必须将许多变量传递给每个函数,这会使代码看起来非常难看。

【问题讨论】:

    标签: variables jenkins groovy scope


    【解决方案1】:

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

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

    【讨论】:

    • 使用我已经尝试过的定义。这样做的问题是它不适用于节点内部调用的函数(而不是不传递变量)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2013-10-04
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多