2014-01-14 116 views
1

我正在嘗試使用Groovy的JsonBuilder和Groovy PostBuild插件創建Jenkins構建的JSON輸出。一切似乎都在工作,除了構建結果。它不給我JSON輸出中的實際生成結果,它給了我所有可能結果(即SUCCESS,UNSTABLE,FAILURE等)的數組。如果我只是將結果打印到控制檯,它將打印出實際結果。將Jenkins構建結果寫入JSON

下面是代碼:

import groovy.json.* 

def result = manager.build.result 
manager.listener.logger.println result  // Prints just the build result 

def json = new groovy.json.JsonBuilder() 
def root = json.build { 
    build_number manager.build.number 
    build_timestamp manager.build.timestamp 
    build_duration manager.build.duration 
    build_url manager.build.url 
    build_project_name manager.build.project.name 
    build_culprits manager.build.culprits 
    build_result result     // Prints an array of all possible results 
    build_result manager.build.result // Also prints an array of all possible results 
} 

manager.listener.logger.println "...and the status is ${result}"  // Prints just the build result 
manager.listener.logger.println JsonOutput.prettyPrint(json.toString()) 

這裏是輸出:

UNSTABLE 
...and the status is UNSTABLE 
{ 
    "build": { 
     "build_number": 85, 
     "build_timestamp": "2014-01-14T13:26:06+0000", 
     "build_duration": 0, 
     "build_url": "job/JSON_Test/85/", 
     "build_project_name": "JSON_Test", 
     "build_culprits": [ 

     ], 
     "build_result": { 
      "names": [ 
       "SUCCESS", 
       "UNSTABLE", 
       "FAILURE", 
       "NOT_BUILT", 
       "ABORTED" 
      ], 
      "completeBuild": true 
     } 
    } 
} 

我曾嘗試用於可變結果的各種不同的語法組合,例如$結果,$ {結果}和$ {result}在json.build塊中,但都會導致編譯錯誤。

+1

你可以嘗試'build_result result.toString()' –

+0

這奏效了 - 非常感謝你! – JamesE

+0

作爲回答添加:-) –

回答

0

resulthudson.model.Result的一個實例,我認爲它試圖序列化the whole class。您只需要打印result類的字符串輸出。

速戰速決是:

def root = json.build { 
    build_number manager.build.number 
    build_timestamp manager.build.timestamp 
    build_duration manager.build.duration 
    build_url manager.build.url 
    build_project_name manager.build.project.name 
    build_culprits manager.build.culprits 
    build_result result.toString() // get the string representation 
    // or: 
    // build_result result.exportedObject 
}