我最近正在将一个groovy Jenkins脚本重构为声明式,我注意到许多限制适用于pipeline{}块中的脚本,而不适用于它外部定义的函数,即使该函数是从声明式脚本内部调用的。
举例来说:
stages {
stage ("${any_stage_name}") {
...
...
}
}
字符串
上面的代码在声明性管道中给予,因为它目前不支持变量作为阶段名,但是在函数中声明一个阶段--用一个变量作为一个名字--就可以了!
def sampleFunc() {
stage ("${any_stage_name}") {
...
...
}
}
型
类似地,for循环也可以在函数中使用,但不能在声明性脚本本身中使用。
用户定义函数是否默认作为groovy类加载并在其run方法中执行??
我正在寻找一个详细的解释为什么会发生这种情况!
PS:我对jenkins非常陌生。
1条答案
按热度按时间zengzsys1#
对于脚本流水线和声明性流水线,使用了不同的AST解析器(用于检测变量的工具,其中变量是块的开始,其中是结束,其中是if语句等)以及它们如何转换和执行。在声明式中,首先开始语法验证,然后开始变量求值
这里详细说明
也看到这个
https://www.youtube.com/watch?v=i9pNYW1Pg9A
你会理解为什么以及它是如何在后台工作的。推荐你阅读关于groovy https://www.youtube.com/watch?v=fdpKCuJKbMg中的委托/闭包的文章。
这是基本概念