2014-01-14 71 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 
}