我在不同的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()
答案 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()
将打印:
你好乔恩
使用requireValidation
在GroovyScriptEngine
函数内部(受Python启发)进行导入。该功能的直接使用归功于this.metaClass.mixin script
的魔力。在main.groovy
中,更好的方法是:
def script = new GroovyScriptEngine('.').with {
loadScriptByName('G.groovy')
}
this.metaClass.mixin script
def requireValidation(){
hello('jon');
}
requireValidation()