Jenkins Groovy如何在不结束管道的情况下从@NonCPS方法调用方法

我需要在Jenkins Pipeline中解析一些JSON并在循环中调用一些常规方法,但是脚本始终在第一个函数调用后退出。这该怎么做?

import groovy.json.JsonSlurper

import com.cloudbees.groovy.cps.NonCPS

@NonCPS

def myMethod(String json) {

def jsonSlurper = new JsonSlurper()

def jsonObject = jsonSlurper(json)

jsonObject.each {

obj ->

switch(obj.name) {

case "foo":

doAThing(obj)

break

case "bar":

doAnotherThing(obj)

break

}

}

}

在上面的示例中,即使使用json对象,例如:

[{

"name": "foo"

}, {

"name": "bar"

}]

…管道总是在第一次迭代后退出。据推测这是由于混合了同步和异步功能。有什么办法吗?

回答:

我已经通过执行以下操作基本上解决了此问题:

import groovy.json.JsonSlurper

def myMethod(String json) {

def jsonSlurper = new JsonSlurper()

def jsonObject = jsonSlurper(json)

jsonSlurper = null

for(int i = 0; i < jsonObject.size(); i++) {

switch(jsonObject[i].name) {

case "foo":

doAThing(jsonObject[i])

break

case "bar":

doAnotherThing(jsonObject[i])

break

}

}

}

使用完JsonSlurper实例后,立即销毁它,删除@NonCPS批注,切换到C样式的for循环,而不是每个循环。

以上是 Jenkins Groovy如何在不结束管道的情况下从@NonCPS方法调用方法 的全部内容, 来源链接: utcz.com/qa/414638.html

回到顶部