【问题标题】:Cannot invoke method getLastSuccessfulBuild() on null object无法在空对象上调用方法 getLastSuccessfulBuild()
【发布时间】:2017-09-15 12:42:25
【问题描述】:

无法通过 Groovy 脚本检索 Jenkins 作业上一个成功的作业变量或参数,以便我可以将这些作为变量传递给下一个作业。

import jenkins.model.Jenkins
def job = Jenkins.instance.getJob("Testing-4")
def run = instance.getItems()
println run.getEnvironment()["PipelineId"]

错误日志

    ERROR: Build step failed with exception
java.lang.NullPointerException: Cannot invoke method getLastBuild() on null object
    at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
    at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)
    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:3)
    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.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:168)
    at hudson.plugins.groovy.SystemGroovy.run(SystemGroovy.java:95)
    at hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:59)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
    at hudson.model.Build$BuildExecution.build(Build.java:205)
    at hudson.model.Build$BuildExecution.doRun(Build.java:162)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
    at hudson.model.Run.execute(Run.java:1738)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)

【问题讨论】:

  • 编辑后,给定的代码和异常不再有意义。
  • @doelleri 更新了最新的错误日志

标签: jenkins groovy groovy-console


【解决方案1】:

来自Jenkins.getItem()的JavaDoc:

返回:一个项目 其Item.getName()name,其Item.getParent()this,或 null如果没有这个项目,或者有但当前用户缺少 Item.DISCOVERItem.READ

对于您,getItem("Testing-4") 正在返回 null,因此要么没有名称为 "Testing-4" 的项目,要么您没有以具有适当权限的用户身份登录。

您可以使用getItems() 获取项目列表,这将有助于在探索性脚本中找出可供您使用的项目的外观。

【讨论】:

  • import jenkins.model.Jenkins def job = Jenkins.instance.getJob("Testing-4") def run = job.getItems() 错误:构建步骤失败,出现异常 java.lang.NullPointerException:无法在 org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77) 的空对象上调用方法 getItems()
  • instance.getItems() 不是job.getItems()。我们已经确定 job 为空。
  • 新错误:构建步骤失败,出现异常 groovy.lang.MissingPropertyException:没有这样的属性:类的实例:org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50) 处的 Script1在 org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)
  • 我现在设法得到了代码。您能帮我将 groovy 输出插入 Jenkins Env 变量吗?
【解决方案2】:
import hudson.model.*;

def lastSuccessfulPipelineID = build.getProject().getLastSuccessfulBuild().properties.get("envVars")['PipelineNumber']
def pa = new ParametersAction([
  new StringParameterValue("lastSuccessfulPipelineID", lastSuccessfulPipelineID)
])
println(lastSuccessfulPipelineID)

build.addAction(pa)

【讨论】:

  • 有人可以帮我将 groovy 输出插入到 Jenkins 当前工作环境变量中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多