如何在管道的groovy代码中处理闭包作用域

时间:2019-08-23 15:12:36

标签: jenkins groovy jenkins-groovy

我有一个名为“ runTest”的方法,它负责在管道中运行某些测试,还有另一个名为“ chooseTest”的方法,该方法负责解析参数并将这些测试附加到地图中。在“ chooseTest”方法中,我还具有切换用例,用于检查需要在映射中附加哪个测试。在那种切换情况下,如何使用闭包调用“ runTest”方法,以便在退出循环后(用于检查每个测试)可以调用它。

我曾尝试将“ runTest”本身设置为闭包,但是遇到了“ Method too long error”(方法太长错误),调试起来很麻烦,因此我尝试在每种if语句中创建一个闭包变量。我遇到了范围问题,该问题不允许我在for循环之外运行这些闭包调用。我在下面附上了我的方法示例

// INSIDE of chooseTest method-->

switch (testName){
      case 'aTest':
           def runATest = {runTest('aTest')}
           break
      case 'bTest':
           def runBTest = {runTest('bTest')}
           break
}

runAtest.call()

//This is where I ran into scoping issue

//Another approach I tried (saw this approach elsewhere, not sure if this is even the correct approach syntactically)

def runTests = []
switch (testName){
      case 'aTest':
           runTests << {-> runTest('aTest')}
           break
      case 'bTest':
           runTests << {-> runTest('bTest')}
           break
}

runTests.each


我希望闭包没有作用域错误,当我在case语句之外调用它时,它将调用choiceTest方法。

1 个答案:

答案 0 :(得分:1)

我真是个菜鸟,我可以这样定义。

def runAtest

switch(test){
    case 'atest':
        runAtest = {print('you a noob')}
        break
}