Fo.*_*Fo. 6 groovy jenkins cloudbees jenkins-workflow
我需要在Jenkins管道中解析一些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
}
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,即使使用json对象,例如:
[{
"name": "foo"
}, {
"name": "bar"
}]
Run Code Online (Sandbox Code Playgroud)
...管道总是在第一次迭代后退出.这可能是由于混合同步和异步功能.有没有办法做到这一点?
我基本上通过执行以下操作解决了这个问题:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用后立即销毁JsonSlurper实例,删除@NonCPS注释,切换到c-style for循环而不是每个.
| 归档时间: |
|
| 查看次数: |
18478 次 |
| 最近记录: |