2017-08-17 62 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