【发布时间】:2016-02-04 05:00:50
【问题描述】:
我正在使用 Jenkins 1.6.20 测试工作流插件,它使用 Groovy 来创建你所知道的作业。
我正在尝试获取有关当前作业的信息,例如作业的工作目录。
这是我的代码:
import hudson.EnvVars
import hudson.model.*
def build_number = Job.getBuildDir()
echo "$build_number"
它给了我错误:
groovy.lang.MissingMethodException: No signature of method: static hudson.model.Job.getBuildDir() is applicable for argument types: () values: []
Possible solutions: getBuildDir(), getBuilds(), getBuild(java.lang.String), getBuilds(hudson.model.Fingerprint$RangeSet), getRootDir()
at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1367)
at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1353)
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:15)
at WorkflowScript.run(WorkflowScript:4)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:69)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:106)
at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixName(FunctionCallBlock.java:74)
at sun.reflect.GeneratedMethodAccessor1418.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
使用本文档:
http://javadoc.jenkins-ci.org/hudson/model/Job.html
我可以读到 getBuildDir 方法实际上是存在的,而且错误提示我使用 getBuildDir 对我来说毫无意义。
【问题讨论】:
-
getBuildDir不是静态方法。你需要一个Job的实例来调用它,而不是类本身 -
如果实例有一个受保护的构造函数,我该如何获取它?
-
不确定...但你不应该需要构造函数,因为已经有工作不存在?
-
这个问题不是关于 Java 原理的技术问题,而是关于如何使用 Jenkins 和工作流插件来实现我的目标。
-
我在这个问题中回答了你原来的问题,这是一个关于面向对象原则的技术问题。我没有将其发布为答案,因为我不知道如何使用该 jenkins 插件来做您想做的事情
标签: jenkins groovy continuous-integration jenkins-workflow