在Groovy中访问闭包外部的变量

时间:2017-03-06 20:35:08

标签: groovy scope jenkins-pipeline

有没有办法,我可以访问闭包之外的变量。此处的结果是stage中的Jenkinsfile。所以,代码片段如下所示:

node('pool'){
 try{
     stage('init'){
   def list = []
  //some code to create the list
    }
     stage('deploy'){
   //use the list create in the above stage/closure
     } 

    }

  catch(err){
   //some mail step
   }

  }

使用此代码,我无法访问在第一个list中创建的stage/closure

如何设置让新创建的list可以访问下一个阶段/闭包?

2 个答案:

答案 0 :(得分:1)

@tim_yates ..有你的建议。这有效。最后很容易:)

node('pool') {
  try {
    def list = [] //define the list outside of the closure

    stage('init') {
      //some code to create/push elements in the list
    }
    stage('deploy') {
      //use the list create in the above stage/closure
    }

  } catch (err) {
    //some mail step
  }

}

答案 1 :(得分:0)

我知道它已经很晚了,但值得一提的是,当您定义类型或def(用于动态解决方案)时,您需要创建本地范围变量将仅在封闭内部可用。

如果省略声明,变量将可用于整个脚本:

node('pool'){
    try {
        stage('Define') {
            list = 2
            println "The value of list is $list"
        }
        stage('Print') {
            list += 1
            echo "The value of list is $list"
        }
        1/0 // making an exception to check the value of list
    }
    catch(err){
        echo "Final value of list is $list"
    }
}

返回:

The value of list is 2
The value of list is 3
Final value of list is 3