从管道中的函数调用GLOBAL Jenkins库

时间:2018-06-13 20:10:03

标签: jenkins groovy jenkins-pipeline

假设:

Model.Photos

此代码有效,并且调用库#!groovy @Library('GreatUtils') def utils = new com.X.Utils(script:this) node { stage('Call utils.check directly') { utils.check() } }

utils

这会抛出 -

  

没有这样的属性:utils
   对于类:groovy.lang.Binding`

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在groovy函数中,无法访问其范围之外的变量声明,错误只是因为变量utils超出了范围。

通过这样的参数传递它应该有效

#!groovy

@Library('GreatUtils')
def utils = new com.X.Utils(script:this)

node {
    stage('Call utils.check indirectly') {
        checkUtils(utils)
    }
}

def checkUtils(utils) {
    utils.check()
}

或者,如果您不想使用参数,您可以使用函数式编程样式并使用Closures之类的

#!groovy

@Library('GreatUtils')
def utils = new com.X.Utils(script:this)

def check = { -> utils.check() }
node {
    stage('Call utils.check indirectly') {
       check()
    }
}

修改:

添加全局初始化可能性。

#!groovy

@Library('GreatUtils')
utils = new com.X.Utils(script:this)

node {
    stage('Call utils.check indirectly') {
        checkUtils()
    }
}

def checkUtils() {
    utils.check()
}

应该工作。