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