Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins中groovy jsonBuilder的间歇性堆栈溢出错误_Groovy_Jenkins_Jenkins Plugins - Fatal编程技术网

Jenkins中groovy jsonBuilder的间歇性堆栈溢出错误

Jenkins中groovy jsonBuilder的间歇性堆栈溢出错误,groovy,jenkins,jenkins-plugins,Groovy,Jenkins,Jenkins Plugins,我在Jenkins中使用带有groovy后期构建插件的groovy jsonBuilder时遇到间歇性堆栈溢出错误。我要说的是,下面的代码大约有25%的时间是有效的,其余75%的时间是失败的。你知道这是什么原因吗?错误的第一部分如下。多谢各位 import groovy.json.* import hudson.model.* def projectName = manager.build.project.name def job = manager.hudson.instance.getI

我在Jenkins中使用带有groovy后期构建插件的groovy jsonBuilder时遇到间歇性堆栈溢出错误。我要说的是,下面的代码大约有25%的时间是有效的,其余75%的时间是失败的。你知道这是什么原因吗?错误的第一部分如下。多谢各位

import groovy.json.*
import hudson.model.*


def projectName = manager.build.project.name
def job = manager.hudson.instance.getItem(projectName)
def scm = job.scm
def rtcStream = scm.getStreamName()
def rtcWorkspace = scm.getWorkspaceName()
def duration = manager.build.getExecutor().getElapsedTime()
def result = manager.build.result

def json = new JsonBuilder()

def root = json.build {
    build_number manager.build.number
    build_timestamp manager.build.timestamp
    build_duration duration
    build_url manager.build.url
    build_project_name projectName
    stream rtcStream
    workspace rtcWorkspace
    build_culprits manager.build.culprits
    build_result result.toString()
}

def jsonString = JsonOutput.prettyPrint(json.toString())
manager.listener.logger.println jsonString

def channel = manager.build.workspace.channel;

def fp = new hudson.FilePath(channel, manager.build.workspace.toString() + "\\build.json")

if(fp != null) {
    manager.listener.logger.println "Getting ready to write build.json"
    fp.write(jsonString, null); //writing to file
    manager.listener.logger.println "Done writing build.json"
}
错误:

FATAL: null
java.lang.StackOverflowError
    at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72)
    at sun.reflect.GeneratedMethodAccessor5636.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
    at groovy.lang.Closure.call(Closure.java:415)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:3653)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2379)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2396)
    at org.codehaus.groovy.runtime.dgm$83.invoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:146)
    at groovy.json.JsonOutput$toJson.callStatic(Unknown Source)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:138)
    at groovy.json.JsonOutput$toJson$3.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:50)
    at groovy.json.JsonOutput$toJson$4.callStatic(Unknown Source)
    at groovy.json.JsonOutput$_toJson_closure2.doCall(JsonOutput.groovy:150)
    at sun.reflect.GeneratedMethodAccessor5636.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
    at groovy.lang.Closure.call(Closure.java:415)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:3653)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2379)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2396)
    at org.codehaus.groovy.runtime.dgm$83.invoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:146)
    at groovy.json.JsonOutput$toJson.callStatic(Unknown Source)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:138)
    at groovy.json.JsonOutput$toJson$3.callStatic(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:50)
    at groovy.json.JsonOutput$toJson$4.callStatic(Unknown Source)
    at groovy.json.JsonOutput$_toJson_closure2.doCall(JsonOutput.groovy:150)
    at sun.reflect.GeneratedMethodAccessor5636.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:903)
    at groovy.lang.Closure.call(Closure.java:415)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForMapEntry(DefaultGroovyMethods.java:3653)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2379)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.collect(DefaultGroovyMethods.java:2396)
    at org.codehaus.groovy.runtime.dgm$83.invoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:146)
    at groovy.json.JsonOutput$toJson.callStatic(Unknown Source)
    at groovy.json.JsonOutput.toJson(JsonOutput.groovy:138)
    at groovy.json.JsonOutput$toJson$3.callStatic(Unknown Source)

这通常是由于一个复杂的对象本身有一个内部引用,这会导致json构建器无限循环

查看
json.build
中的所有变量,我能看到的唯一复杂变量是
manager.build.timestamp
(它是
日历
实例)

您可以尝试以下备选方案之一:

build_timestamp manager.build.timestampString // get duration of build

或者说

build_timestamp manager.build.timestamp.format( 'yyyy/MM/dd HH:mm:ss' )
将日历格式化为日期/时间字符串的步骤


祝你好运

听起来你的一个元素包含了它自己。。。您能记录输入并查看是哪一个导致了崩溃吗?尝试将
manager.build.timestamp
更改为
manager.build.timestamp.toString()
当然,我无法让它失败。将toString()添加到时间戳中会在JSON输出中给出这样的结果:“build_timestamp”:“java.util.GregorianCalendar[time=13897977000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\“US/Eastern\”,offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone”[id=US/Eastern,offset=-18000000,dststavings=3600000,usedylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,……是的,我检查了这些参数,我相信这是唯一一个复杂的对象……可能
manager.build.timestampString
Is?看起来timestamp字符串实际上是以分钟为单位的构建持续时间。例如:timestamp:18分钟。我将继续这样做-我认为您是对的,这是由于timestamp对象造成的。要尝试timestamp字符串2吗
build_timestamp manager.build.timestampString2 // Not sure
build_timestamp manager.build.timestamp.format( 'yyyy/MM/dd HH:mm:ss' )