2017-08-17 68 views
0

我在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节点值 ?

+0

显示你的XML,你需要读什么数据? – Rao

+0

请检查答案,看看是否有帮助。 – Rao

+0

亲爱的饶,我编辑了我的问题,并把代码..你可以请检查并提供解决方案。 – user3736941

回答

0

下面是你需要和在线评论的内容:

def xml = new XmlSlurper().parse(Job_Result_file) 

//Change the element name if needed 
def elementToFind = 'n' 

//Get all the values of Tag - elementToFind 
def result = xml.'**'.findAll{it.name() == elementToFind} 
println result 

//Get the first item from the result 
def requiredValue = result[0].text() 
println "User required value : $requiredValue" 

//Test if the value is as expected 
assert 'Send_Deployment_Request' == requiredValue 

你可以很快看到它在线demo

+0

亲爱的Rao,它给我所有标签的价值而不是特定的标签。 – user3736941

+0

xml中是否有任何更改?你有没有检查演示? – Rao

+0

xml没有改变。我可以在演示中看到期望值,但是当我在我的环境中执行此代码时,它会给出所有tha xml标记的值 – user3736941