0

Groovy クラス (共有ライブラリに存在する) にアクセスする単純なパイプライン スクリプトがあります。パイプライン スクリプトは (それ自体への) 参照をクラスに渡し、クラスはスクリプト内で見つかった関数またはクロージャーを呼び出します。同じスクリプトでメンバーにアクセスし、

結果は groovy.lang.MissingPropertyException 例外です。

実際の(実行可能な)コードは次のとおりです。

Jenkins パイプライン スクリプト:

@Library("testLib") _

import my.domain.Tester;

public Tester tester = new Tester(this);

def closure()
{
    echo "tester: " + tester;
}

node("master")
{
    tester.test();
}

com.domain.Tester.groovy クラス:

package my.domain

class Tester
{
    Script scriptRef = null;

    public Tester(Script scriptRef)
    {
        this.scriptRef = scriptRef;
    }

    public void test()
    {
        this.scriptRef.closure();
    }
}

受け取った例外:

groovy.lang.MissingPropertyException: No such property: tester for class: WorkflowScript
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:39)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
    at WorkflowScript.closure(WorkflowScript:9)
    at my.domain.Tester.test(Tester.groovy:8)
    at WorkflowScript.run(WorkflowScript:23)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)
    at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:66)
    at sun.reflect.GeneratedMethodAccessor538.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
    at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
    at com.cloudbees.groovy.cps.Next.step(Next.java:83)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
    at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
    at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
    at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
    at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
    at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:186)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:370)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$200(CpsThreadGroup.java:93)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:282)
    at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:270)
    at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
    at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
    at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Finished: FAILURE

したがって、パイプライン スクリプトが通過するcps 変換手順が原因で何かが発生していることは明らかであり、スクリプト メンバーはもう存在しません (名前ではなく、[おそらく] スコープではありません)。

  1. 誰かが解決策/アイデア/方向性を持っていますか?
  2. 誰かが CPS Transform プロセスに関する情報を持っていますか (具体的には CPS 理論ではなく Jenkins に)、または変換後に最終製品の WorkflowScript を確認するにはどうすればよいですか?
4

1 に答える 1