2012-12-10 167 views
1

嗨,我已經在jenkins的後期生成操作中添加了以下groovy代碼。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); 
} 

,但我得到以下錯誤,當我執行上面的代碼:由於我是新來的Groovy我不知道如何着手

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 

回答

1

我相信那是因爲你在一個沒有元素的迭代器上調用next()

我相信這樣做同樣的事情,但處理upStreamBuilds地圖是空的:

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:你並不需要導入java.util.*與常規

+0

遺憾地說,當我使用上述代碼jenkins不執行「Groovy Postbuild」步驟。它只是忽略了腳本。我錯過了什麼嗎? – user1891622

+0

你確定'manager.build.upstreamBuilds'返回一些東西嗎?這可能是它返回一個空的地圖 –

+0

實際上我看到一個方法爲「getUpstreamBuilds()」,所以我用它,但我不知道upstreambuilds – user1891622