最近同事拿了段代碼讓我看看為啥獲取不到想要的值姿锭?(已脫敏處理)
@NonCPS
def ImageJson(url) {
pkg_name = url.split("/")[-1]
image_json_file = "image.json"
sh """
wget ${url}
tar -xvf ${pkg_name}
rm -f ${pkg_name}
sshpass -p ***** scp image.json ***@#######:/srv/ftp/tmp/
"""
def text = new URL("#########/tmp/image.json").text //@Tag
def object = new groovy.json.JsonSlurper().parseText(text)
def images = object.images
def imageList = []
images.each { def it ->
def imageName = it.image.substring(0, it.image.lastIndexOf(":"))
def imageTag = it.image.substring(it.image.lastIndexOf(":") + 1, it.image.length())
imageList.add("imageName": imageName, "imageTag": imageTag)
}
return imageList
}
在標(biāo)注@Tag的地方獲取不到j(luò)son的內(nèi)容呻此,jenkins也沒報(bào)任何錯(cuò)誤,甚至在debug的時(shí)候發(fā)現(xiàn)在它前后的代碼都不執(zhí)行掌唾。感覺就像丟棄了一般。
一開始沒有注意到方法體前面的標(biāo)注@NonCPS犀斋,就想著把它拆成兩個(gè)方法情连,測試是可以拿到數(shù)據(jù)的览效,側(cè)面驗(yàn)證了代碼塊是沒有問題的。那為啥合起來就不行呢挽拔?以前用的時(shí)候只知道它可以繞過一些安全檢查但校,可以處理沒有序列化的對(duì)象啥的。但是這里面的情況并不存在上述代碼里状囱。就去爬了下官網(wǎng)
里面說加上這個(gè)亭枷,方法體內(nèi)部不允許打斷,可以做一些計(jì)算啥的猾编。所以還是要慎用升敲。不建議在sh/bat這種管道操作里使用它,實(shí)在用了瘪撇,也只能用一次鼻弧,而且覆蓋整個(gè)方法,像上述代碼管道之后又去做了其它的事情攘轩,就被丟掉了。去掉這個(gè)標(biāo)簽歼捏,就可以正常執(zhí)行了。