我需要在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循环,而不是每个循环。