jenkins上的Groovy代码抛出错误

jenkins上的Groovy代码抛出错误,groovy,jenkins,Groovy,Jenkins,嗨,我在jenkins的后期构建操作中添加了以下groovy代码 import java.util.* import hudson.model.* upstreamBuilds = manager.build.getUpstreamBuilds(); upstreamJob = upstreamBuilds.keySet().iterator().next(); lastUpstreamBuild = upstreamJob.getLastBuild(); if(lastUpstreamBui

嗨,我在jenkins的后期构建操作中添加了以下groovy代码

import java.util.*
import hudson.model.*

upstreamBuilds = manager.build.getUpstreamBuilds();
upstreamJob = upstreamBuilds.keySet().iterator().next();
lastUpstreamBuild = upstreamJob.getLastBuild();
if(lastUpstreamBuild.getResult().isBetterThan(manager.build.result)) {
lastUpstreamBuild.setResult(manager.build.result);
}
但是当我执行上述代码时,我得到以下错误:

ERROR: Failed to evaluate groovy script.
java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:897)
at java.util.HashMap$KeyIterator.next(HashMap.java:928)
at java_util_Iterator$next.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
at Script1.run(Script1.groovy:5)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:580)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:618)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:589)
at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder.perform(GroovyPostbuildRecorder.java:276)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:710)
at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:685)
at hudson.model.Build$RunnerImpl.post2(Build.java:162)
at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:632)
at hudson.model.Run.run(Run.java:1463)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:239)
Recording fingerprints

由于我是groovy新手,我不知道如何继续?

我认为这是因为您在一个迭代器上调用了
next()
,其中没有任何元素

我相信这也会做同样的事情,但会处理
上游文件
映射为空:

upstreamJob = manager.build.upstreamBuilds.find()
if( upstreamJob != null ) {
  lastUpstreamBuild = upstreamJob.key.lastBuild
  if( lastUpstreamBuild.result.isBetterThan( manager.build.result ) ) {
    lastUpstreamBuild.result = manager.build.result
  }
}

PS:您不需要使用groovy导入
java.util.*

很抱歉,当我使用上述代码时,jenkins没有执行“groovy后期构建步骤”。它只是忽略了脚本。我遗漏了什么吗?您确定
manager.build.upstreamBuilds
返回了什么吗?可能是它返回了一个空映射实际上我看到一个方法是“getUpstreamBuilds()”,所以我用过它,但我不确定UpstreamBuildGroovy是否会在访问
upstreamBuilds
属性时调用
getUpstreamBuilds()
。很抱歉,我对groovy非常陌生。既然上面的代码似乎不适合我,我现在该怎么办