我有一个很长的工作流程来构建和测试我们的应用程序。事实上,当我们尝试加载主工作流脚本时,我们得到了这个例外:
java.lang.ClassFormatError: Invalid method Code length 67768 in class file WorkflowScript
我并不为此感到骄傲。我想将工作流分成我们从主工作流脚本加载的较小脚本,但是遇到了变量作用域的问题。例如:
def a = 'foo' //some variable referenced in multiple workflow stages
node {
echo a
}
//... and then a whole bunch of other stages
可能会成为
def a = 'foo' //some variable referenced in multiple workflow stages
node {
git: ...
load 'flowPartA.groovy'
}()
flowPartA.groovy的样子:
{ ->
node {
echo a
}
}
根据我对文档的理解,其中flowPartA.groovy被解释为闭包,我希望变量'a'将保留在范围内,但相反,我得到一个例外。
groovy.lang.MissingPropertyException: No such property: a for class: groovy.lang.Binding
我是否遗漏了工作流解释流脚本的方式?是否有一种很好的方法来采用一个庞大的工作流程,使用许多很多参数并将其拆分成更小的块?
答案 0 :(得分:1)
你必须在外部groovy中定义一个函数并调用它传递所有必需的参数:
def a = 'foo'
node('slave') {
git '…'
def flow = load 'flowPartA.groovy'
flow.echoFromA(a)
}
flowPartA.groovy
包含:
def echoFromA(String a) {
echo a
}
return this
有关详细信息,请参阅documentation。