Jenkins Groovy with XMLSlurper错误“无法序列化”
问题描述:
我在Jenksin 2.46.2上,并且有一个使用Active Choices Reactive Parameter的作业。我使用XMLSlurper从XML文件中选择我的第一个服务器,并参考我的第二个选择。当我硬编码服务器名称代码工作正常。当我在代码中使用该变量时,出现错误。Jenkins Groovy with XMLSlurper错误“无法序列化”
此代码:
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def SERVER = 'testserver1'
def output = []
serverList.Server.find { [email protected] == SERVER}.CleanUp.GZIP.File.each{
it.output.add(p)
}
return output
当我从我以前选择的参考变量选择我得到的错误:
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def SERVER = SERVER
def output = []
serverList.Server.find { [email protected] == SERVER}.CleanUp.GZIP.File.each{
it.output.add(p)
}
return output
,我得到的错误是下面。任何想法,为什么我得到一个错误?
WARNING: failed to serialize [[/app/test2/log], [/app/test2/log]] for ...*other text*... net.sf.json.JSONException: There is a cycle in the hierarchy!
这里是我的XML文件:
<ServerList>
<Server name="testserver1">
<CleanUP>
<GZIP>
<File KeepDays="30">/app/test1/log</File>
</GZIP>
</CleanUP>
</Server>
<Server name="testserver2">
<CleanUP>
<GZIP>
<File KeepDays="30">/app/test2/log</File>
</GZIP>
</CleanUP>
</Server>
</ServerList>
NE.jpg
答
下面是你需要的脚本,该脚本读取文件元素的值,并返回一个列表:
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
return serverList.'**'.findAll{ it.name() == 'File'}*.text()
输出:
[/app/test1/log, /app/test2/log]
编辑:基于OP评论
def server = 'testserver1'
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def result = serverList.'**'.find{ [email protected] == server}.CleanUP.GZIP.File
println result
return result
EDIT2:
如果你想列表或数组,请尝试以下:
def server = 'testserver1'
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def result = serverList.'**'.findAll{ [email protected] == server}*.CleanUP.GZIP.File.text()
println result
return result
什么是所需的输出? “日志”是? – Rao
谢谢.....结果应该显示: /app/test1/log –
但是你说过,如果你使用'testserver1',那么它已经工作了,那你试图改变什么标准呢? '你是什么意思'我引用我之前选择的变量选择我得到的错误:'? – Rao