使用MarkupBuilder构建xml文件时没有结束标签 [英] No closing tags while building xml file with MarkupBuilder
问题描述
我想在我的Jenkins-Pipeline-Job中使用Groovy来建立我的Jenkins从站和已安装节点的状态列表.因此,我有一些列表应显示在xml中.在使用IntelliJ进行测试时,我编写了以下代码.
I want to use Groovy in my Jenkins-Pipeline-Job to build a Statuslist of my Jenkins Slaves and the installed nodes. Therefore I have some lists which should be displayed in xml. While testing with IntelliJ i wrote the following code.
import groovy.xml.MarkupBuilder
def listNodeNames = []
listNodeNames << 'SLAVE1_NODE_1'
listNodeNames << 'SLAVE1_NODE_2'
listNodeNames << 'SLAVE2_NODE_1'
listNodeNames << 'SLAVE2_NODE_2'
def listComputerNames = []
listComputerNames << 'SLAVE1'
listComputerNames << 'SLAVE2'
def stringWriter = new StringWriter()
def xmlBuilder = new MarkupBuilder(stringWriter)
xmlBuilder.computers {
for (i = 0; i < listComputerNames.size(); i++){
xmlBuilder.computer {
xmlBuilder.computerName("${listComputerNames[i]}")
xmlBuilder.computerStatus("online")
for (j = 0; j < listNodeNames.size(); j++){
if (listNodeNames[j].contains(listComputerNames[i])){
xmlBuilder.slave {
xmlBuilder.slaveName("${listNodeNames[j]}")
xmlBuilder.slaveStatus('test')
xmlBuilder.slaveReason('test')
}
}
}
}
}
}
def xml = stringWriter.toString()
println xml
只要我在IntelliJ中运行代码,一切就可以正常工作,并且我会得到一个有效的xml文件:
As long as i run the code in IntelliJ, everything works fine and i get a valid xml file:
<computers>
<computer>
<computerName>SLAVE1</computerName>
<computerStatus>online</computerStatus>
<slave>
<slaveName>SLAVE1_NODE1</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
</slave>
<slave>
<slaveName>SLAVE1_NODE2</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
</slave>
</computer>
<computer>
<computerName>SLAVE2</computerName>
<computerStatus>online</computerStatus>
<slave>
<slaveName>SLAVE2_NODE1</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
</slave>
<slave>
<slaveName>SLAVE2_NODE2</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
</slave>
</computer>
</computers>
但是,如果我在Jenkins实例上执行相同的脚本,则大多数结束标记都将丢失:
But if i execute the same script on my Jenkins instance most closing tags are missing:
<computers>
<computer>
<computerName>SLAVE1</computerName>
<computerStatus>online</computerStatus>
<slave>
<slaveName>SLAVE1_NODE1</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
<slave>
<slaveName>SLAVE1_NODE2</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
<computer>
<computerName>SLAVE2</computerName>
<computerStatus>online</computerStatus>
<slave>
<slaveName>SLAVE2_NODE1</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
<slave>
<slaveName>SLAVE2_NODE2</slaveName>
<slaveStatus>test</slaveStatus>
<slaveReason>test</slaveReason>
我是通过jenkins创建xml文件时做错了什么还是有特定步骤要做的?
Am i doing something wrong or are there specific steps to do while creating xml files via jenkins?
推荐答案
我知道了.我真的不明白为什么,但是MarkupBuilder
hast必须封装在@nonCPS
标记的方法内.如果我调用此方法,詹金斯(Jenkins)会按预期执行.
I figured it out. I don't really understand why but the MarkupBuilder
hast du be capsuled inside a @nonCPS
marked method. If I call this method jenkins performs as expected.
@nonCPS
def buildXml(list1, list2){
//generate xml from lists
}
buildXml(list1, list2)
这篇关于使用MarkupBuilder构建xml文件时没有结束标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!