gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:06:55 25 4
gpt4 key购买 nike

我需要在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方法调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com