在共享的Groovy脚本中调用timeout()和input()

时间:2019-07-13 23:52:01

标签: jenkins groovy

我在不同的Jenkins管道之间共享一个Groovy类。我想在共享的Groovy脚本中移动管道的这一部分

timeout (time: 15, unit: 'SECONDS') {
    input ('Validation is required')
}

但是它无法识别输入()或超时() 所以我必须将它们作为参数传递

def requireValidation (Closure timeout, Closure input) {
    timeout (time: 15, unit: 'SECONDS') {
        input ('Validation is required')
    }
}

有没有一种方法可以导入groovy脚本中的输入和超时,我可以不用参数就可以使用函数?

 def requireValidation()

1 个答案:

答案 0 :(得分:0)

常规的常规类G.groovy

class G {
    def hello(s) {
        println("hello ${s}")
    }
    def timeout( ...
    def input( ...
}

以及需要使用它的脚本main.groovy:

def requireValidation(){
    def script = new GroovyScriptEngine('.').with {
        loadScriptByName('G.groovy')
    }
    this.metaClass.mixin script

    hello('jon');
}


requireValidation()

将打印:

  

你好乔恩

使用requireValidationGroovyScriptEngine函数内部(受Python启发)进行导入。该功能的直接使用归功于this.metaClass.mixin script的魔力。在main.groovy中,更好的方法是:

def script = new GroovyScriptEngine('.').with {
    loadScriptByName('G.groovy')
}
this.metaClass.mixin script

def requireValidation(){
    hello('jon');
}

requireValidation()