Jenkins Groovy 出现 XMLSlurper 错误 "failed to serialize"

Jenkins Groovy with XMLSlurper Error "failed to serialize"

我在使用 Jenksin 2.46.2 并且有一份工作使用主动选择反应参数。我 select 我的服务器在我的第一个 selection 中来自 XML 文件,使用 XMLSlurper 并为我的第二个 selection 引用它。当我硬编码服务器名称时,代码工作正常。当我在代码中使用变量时出现错误。

此代码有效:

def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def SERVER = 'testserver1'
def output = []
serverList.Server.find { it.@name == SERVER}.CleanUp.GZIP.File.each{ 
    it.output.add(p)
}

return output

当我从我之前的 selection 引用变量 selection 时,我得到错误:

def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def SERVER = SERVER
def output = []
serverList.Server.find { it.@name == 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

这是您需要的脚本,它读取文件元素的值和 returns 一个列表:

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{ it.@name == server}.CleanUP.GZIP.File
println result
return result

编辑 2:

如果您想要列表或数组,请尝试以下操作:

def server = 'testserver1'
def serverList = new XmlSlurper().parse("/app/jenkins/jobs/servers.xml")
def result = serverList.'**'.findAll{ it.@name == server}*.CleanUP.GZIP.File.text()
println result
return result