2017-09-06 16 views
0

我一直在Jenkins中使用Parametrized-pipelines,并注意到在使用参数时,该值既可以从脚本作用域中使用,也可以通过params.variable使用。 PARAMETER == true params.PARAMETER == true如何将变量放入脚本范围?

在groovy中,是否可以在方法中添加一个变量到脚本范围?我想获得类似的功能,如下...

// I don't want to have to declare value here 
def function1(){ 
    value = 1 
} 
def function2(){ 
    assert value == 1 
} 
function1() 
function2() 

有从函数2中访问值而不做这样的事情的方式...

value = 0 
def function1() { 
    value = 1 
... 
+0

不,这是不可能的,因为你声明了一个局部变量。也许EnvInject是你在找什么?或其他形式的存储变量正在处理中。 – Opal

+0

在进一步的研究中,它看起来并不像一个纯粹的常规方式来做到这一点。考虑到我的方法在节点块之外运行,我使用Jenkin的env来设置所有内容。 –

回答

0

也可以做财产以后这样的:

def f1() { 
    env.aaa = "hello" 
} 

def f2() { 
    assert aaa=="hello" 
} 

node{ 
    f1() 
    f2() 
} 

从本质上讲它设置为一个环境变量。

0

这条管道正常工作:

def f1(){ 
    aaa = "hello" 
} 

def f2(){ 
    assert aaa=="hello" 
} 

node{ 
    f1() 
    f2() 
} 

管道定义实际上是一个扩展groovy.lang.Script

org.jenkinsci.plugins.workflow.cps.CpsScript实例

所以groovy脚本属性应该在这里工作。

+0

感谢您的回应!为什么节点块在其范围内具有aaa是否有特殊原因?我有一些代码在节点外部运行,这可能是我无法使用aaa的原因。在了解詹金输油管的工作原理时,你是否知道一些好的资料来源? –

+0

它连接到groovy。放入所有的f1,f2和节点'println this.toString()',你会发现在任何情况下你都在Script对象的同一个实例中。脚本是一个时髦的对象。当你写'aaa =“hello”''时,如果没有声明变量'aaa',你实际上调用函数'setProperty(“aaa”,“hello”)''println aaa'对应'println getProperty(“aaa “)'。 http://groovy-lang.org/structure.html#_variables – daggett