我在jenkins中使用groovy脚本进行自动化部署。Jenkins ...使用Jenkins中的Groovy访问xml文件中的XML标记值
在一个xml文件中,我想从该xml文件读取特定的xml标记值并将其值赋给一个变量。 Letter我正在使用该变量来编写excel文件。以下是脚本。执行构建后,似乎我无法访问xml标记值。看来每个函数里面的代码都不起作用。任何人都可以请帮我在这
def Build_Name= ""
def Build_Number= ""
def CR_Number=""
def Build_Status= ""
def Build_Failure_Reason=""
def Build_Date=""
Build_Number= "1201"
CR_Number="123"
Build_Status= "SUCCESS"
Build_Failure_Reason="NA"
Build_Date=""
boolean fileSuccessfullyDeleted = new File("/export/home/webm/.jenkins/Build_Report.csv").delete()
f = new File("/export/home/webm/.jenkins/Build_Report.csv")
def Job_Result_file = new File("/export/home/webm/.jenkins/global-build-stats/jobresults/Temp_Job_Result.xml")
//Parse it with XmlSlurper
def xml = new XmlSlurper().parse(Job_Result_file)
xml.list.jbr.each { sd ->
Build_Name= sd.n[0].value
f.append("\r\n"+Build_Name+","+Build_Number+","+CR_Number+","+Build_Status+","+Build_Failure_Reason+","+Build_Date+"")
}
编辑:基于OP添加答案。
下面是xml文件中可用的xml,我想要读取标记的值并将该值赋予变量。在下面的xml标签中,n的值是Send_Deployment_Request。
XML:
<list>
<jbr plugin="[email protected]">
<r>SUCCESS</r>
<n>Send_Deployment_Request</n>
<nb>187</nb>
<d>
<time>1502879887698</time>
<timezone></timezone>
</d>
<du>973</du>
<nn>master</nn>
<un></un>
</jbr>
<jbr plugin="[email protected]">
<r>SUCCESS</r>
<n>Deploy</n>
<nb>187</nb>
<d>
<time>1502879887698</time>
<timezone></timezone>
</d>
<du>973</du>
<nn>master</nn>
<un></un>
</jbr>
</list>
亲爱饶, 请在下面看我的代码。
//Delete if Build_Report fiile already exist
boolean fileSuccessfullyDeleted = new File("/export/home/webmadm/.jenkins/Build_Report.csv").delete()
//Craete new csv file
f = new File("/export/home/webmadm/.jenkins/Build_Report.csv")
def Job_Result_file = new File("/export/home/webmadm/.jenkins/global-build-stats/jobresults/Temp_Job_Result.xml")
def xml = new XmlSlurper().parse(Job_Result_file)
//Change the element name if needed
def Temp_Build_Name= "n"
def Temp_Build_Number= "nb"
def CR_Number=""
def Temp_Build_Status= "r"
def Build_Failure_Reason=""
def Temp_Build_Date="time"
def Temp_Build_Executor="un"
def Build_Name= ""
def Build_Number= ""
def Build_Status= ""
def Build_Date=""
def Build_Executor=""
//Get all the values of Tag - elementToFind
def Build_Name_List= xml.'**'.findAll{'it.name() == Temp_Build_Name'}
def Build_Number_List= xml.'**'.findAll{'it.name() == Temp_Build_Number'}
def Build_Status_List= xml.'**'.findAll{'it.name() == Temp_Build_Status'}
def Build_Date_List= xml.'**'.findAll{'it.name() == Temp_Build_Date'}
def Build_Executor_List= xml.'**'.findAll{'it.name() == Temp_Build_Executor'}
for(int i = 0; i<2; i++)
{
Build_Name= Build_Name_List[i].text()
Build_Number= Build_Number_List[i].text()
Build_Status= Build_Status_List[i].text()
Build_Date= Build_Date_List[i].text()
Build_Executor= Build_Executor_List[i].text()
f.append("\r\n"+Build_Name+","+Build_Number+","+CR_Number+","+Build_Status+","+Build_Failure_Reason+","+Build_Date+"")
}
我正在尝试编写.csv文件。如果您在csc中看到f.append,那么我们有Build_Name值,Build_Number值等等。
但是实际结果不同,Build_Name也包含Build_Number,Build_Status Build_Date。似乎.findAll方法从xml读取整个标签。
我们不能使用.each方法,因为我们用它来更新xml文件中的xml节点值 ?
显示你的XML,你需要读什么数据? – Rao
请检查答案,看看是否有帮助。 – Rao
亲爱的饶,我编辑了我的问题,并把代码..你可以请检查并提供解决方案。 – user3736941