我在Jenkins管道中遇到了一个问题,当使用XmlUtil.serialize
时,我得到了java.io.NotSerializableException
。
验证码:
de updateFile() {
def file = readFile(file: filePath)
def xml = new XmlSlurper().parseText(file)
... update XML
def modifiedXml = XmlUtil.serialize(xml)
writeFile(file: filePath, text: modifiedXml)
}
pipeline {
agent {
label 'agent-1'
}
stages {
stage('Update File') {
steps {
updateFile()
}
}
}
}
字符串
错误信息
原因:java.io.NotSerializableException:groovy.util.slurpersupport.NodeChild
我在另一个服务器上运行这个作为一个Jenkins代理.我也尝试了@NonCPS
,但它也不工作.所以任何人都可以帮助我解决这个问题?
1条答案
按热度按时间h22fl7wq1#
根据https://www.jenkins.io/doc/book/pipeline/cps-method-mismatches/,您不能在
@NonCPS
-艾德方法中使用管道步骤--这可能是此解决方案失败的原因。然而,我认为这个问题确实与CPS转换有关。你可以解决它,但是,甚至不使用
@NonCPS
。将XML相关的操作移动到一个单独的函数中就可以了。下面的操作确实很好:字符串
显然,当在同一个函数中混合管道步骤和XML方法时,CPS转换会失败;将调用放入不同的函数可以避免这个问题。