Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-34517

Pipeline is unable to locate global libraries when build attempts to continue on restart

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: pipeline
    • Labels:
      None
    • Similar Issues:

      Description

      I have created a simple test case to reproduce this using a Jenkinsfile which calls off to a closure called dockerNode, that is located in a global library named dockerNode.groovy, located in workflowLibs/vars/dockerNode.groovy.

      The following exception is thrown in the build console output when restarting Jenkins (JENKINS_URL/restart) during build execution:

      java.io.IOException: Failed to load persisted workflow state
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$3.onSuccess(CpsFlowExecution.java:529)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$3.onSuccess(CpsFlowExecution.java:527)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$4$1.run(CpsFlowExecution.java:568)
      	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$1.run(CpsVmExecutorService.java:32)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
      	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.ClassNotFoundException: dockerNode
      	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:692)
      	at groovy.lang.GroovyClassLoader$InnerLoader.loadClass(GroovyClassLoader.java:445)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:802)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:790)
      	at java.lang.Class.forName0(Native Method)
      	at java.lang.Class.forName(Class.java:348)
      	at org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:131)
      	at org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:112)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:949)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1256)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
      	at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1607)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1607)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
      	at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:149)
      	at org.jboss.marshalling.river.BlockUnmarshaller.readObject(BlockUnmarshaller.java:135)
      	at org.jboss.marshalling.MarshallerObjectInputStream.readObjectOverride(MarshallerObjectInputStream.java:53)
      	at org.jboss.marshalling.river.RiverObjectInputStream.readObjectOverride(RiverObjectInputStream.java:307)
      	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:365)
      	at java.util.HashMap.readObject(HashMap.java:1396)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:307)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1638)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
      	at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
      	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
      	at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$2.onSuccess(CpsFlowExecution.java:469)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution$2.onSuccess(CpsFlowExecution.java:463)
      	at org.jenkinsci.plugins.workflow.support.concurrent.Futures$1.run(Futures.java:150)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)
      	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.access$000(ChainingListenableFuture.java:33)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture$1.run(ChainingListenableFuture.java:196)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:105)
      	at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:155)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.run(ChainingListenableFuture.java:189)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)
      	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.access$000(ChainingListenableFuture.java:33)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture$1.run(ChainingListenableFuture.java:196)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:105)
      	at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:155)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.run(ChainingListenableFuture.java:189)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)
      	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ListFuture.setOneValue(ListFuture.java:158)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ListFuture.access$000(ListFuture.java:40)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ListFuture$2.run(ListFuture.java:107)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)
      	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.access$000(ChainingListenableFuture.java:33)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture$1.run(ChainingListenableFuture.java:196)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.add(ExecutionList.java:105)
      	at com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:155)
      	at org.jenkinsci.plugins.workflow.support.concurrent.ChainingListenableFuture.run(ChainingListenableFuture.java:189)
      	at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:253)
      	at com.google.common.util.concurrent.ExecutionList$RunnableExecutorPair.execute(ExecutionList.java:149)
      	at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:134)
      	at com.google.common.util.concurrent.AbstractFuture.set(AbstractFuture.java:170)
      	at org.jenkinsci.plugins.workflow.support.pickles.TryRepeatedly.access$200(TryRepeatedly.java:40)
      	at org.jenkinsci.plugins.workflow.support.pickles.TryRepeatedly$1.run(TryRepeatedly.java:66)
      	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
      	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
      	... 3 more
      

      Attached are:

      • Jenkinsfile
      • dockerNode.groovy

      Versions:

      • Jenkins 1.642
      • Pipeline 1.14

        Attachments

          Issue Links

            Activity

            Hide
            davidkarlsen davidkarlsen added a comment - - edited

            Even worse - the whole job can go into an illegal state. The job broke on startup with this issue 1), but the next is waiting for the previous one to complete

            1)

            18:57:11 Waiting for builds [717]
            Resuming build
            [Pipeline] End of Pipeline
            [Bitbucket] Notifying commit build result
            [Bitbucket] Build result notified
            java.io.IOException: Failed to load pe
            

            2)

            19:31:54 Waiting for builds [718]
            

            Update: I see this registered as https://issues.jenkins-ci.org/browse/JENKINS-28183

            Show
            davidkarlsen davidkarlsen added a comment - - edited Even worse - the whole job can go into an illegal state. The job broke on startup with this issue 1), but the next is waiting for the previous one to complete 1) 18:57:11 Waiting for builds [717] Resuming build [Pipeline] End of Pipeline [Bitbucket] Notifying commit build result [Bitbucket] Build result notified java.io.IOException: Failed to load pe 2) 19:31:54 Waiting for builds [718] Update: I see this registered as https://issues.jenkins-ci.org/browse/JENKINS-28183
            Hide
            jglick Jesse Glick added a comment -

            Released as 2.1.

            Show
            jglick Jesse Glick added a comment - Released as 2.1.
            Hide
            vehovmar Martin Vehovsky added a comment -

            There seems to be issue with invoking static methods on global variables after updating to 2.1. (I reverted back to 2.0 already)

            Following is supposed to work:

            workflowLibs/vars/TEST.groovy

            def testMethod(String options = '') {
            ...
            }
            
            hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: static TEST.testMethod() is applicable for argument types: (java.lang.String) values: [47380]
            Possible solutions: testMethod(java.lang.String), testMethod()
            	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:6)
            
            
            Show
            vehovmar Martin Vehovsky added a comment - There seems to be issue with invoking static methods on global variables after updating to 2.1. (I reverted back to 2.0 already) Following is supposed to work: workflowLibs/vars/TEST.groovy def testMethod( String options = '') { ... } hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: static TEST.testMethod() is applicable for argument types: (java.lang. String ) values: [47380] Possible solutions: testMethod(java.lang. String ), testMethod() 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:6)
            Hide
            davidkarlsen davidkarlsen added a comment - - edited

            So should this be reopened or reported as a new issue? Could a new release be done after that as we'd really like to get this one.

            Show
            davidkarlsen davidkarlsen added a comment - - edited So should this be reopened or reported as a new issue? Could a new release be done after that as we'd really like to get this one.
            Hide
            davidkarlsen davidkarlsen added a comment -

            ping (we're a CB customer - so this actually came from issue #35678 in zendesk)

            Show
            davidkarlsen davidkarlsen added a comment - ping (we're a CB customer - so this actually came from issue #35678 in zendesk)
            Hide
            vehovmar Martin Vehovsky added a comment -

            davidkarlsen I would expect some feedback from Jesse Glick ...

            Show
            vehovmar Martin Vehovsky added a comment - davidkarlsen I would expect some feedback from Jesse Glick ...
            Hide
            vehovmar Martin Vehovsky added a comment -

            This introduced major regression, see below:

            There seems to be issue with invoking static methods on global variables after updating to 2.1. (I reverted back to 2.0 already)

            Following is supposed to work:

            workflowLibs/vars/TEST.groovy

            def testMethod(String options = '') {
            ...
            }
            
            hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: static TEST.testMethod() is applicable for argument types: (java.lang.String) values: [47380]
            Possible solutions: testMethod(java.lang.String), testMethod()
            	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:6)
            
            
            Show
            vehovmar Martin Vehovsky added a comment - This introduced major regression, see below: There seems to be issue with invoking static methods on global variables after updating to 2.1. (I reverted back to 2.0 already) Following is supposed to work: workflowLibs/vars/TEST.groovy def testMethod( String options = '') { ... } hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: static TEST.testMethod() is applicable for argument types: (java.lang. String ) values: [47380] Possible solutions: testMethod(java.lang. String ), testMethod() 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:6)
            Hide
            spieck Sebastian Pieck added a comment -

            Same issue for me. One workaround is to put your groovy-script into the "src"-folder into a package and instantiate it the "classical" way.
            I hope this helps anyone, because it took me some time to realize

            Show
            spieck Sebastian Pieck added a comment - Same issue for me. One workaround is to put your groovy-script into the "src"-folder into a package and instantiate it the "classical" way. I hope this helps anyone, because it took me some time to realize
            Hide
            vehovmar Martin Vehovsky added a comment -

            Yes, but I really don't want to rewrite all my workflows, just because of regression.

            Show
            vehovmar Martin Vehovsky added a comment - Yes, but I really don't want to rewrite all my workflows, just because of regression.
            Hide
            jglick Jesse Glick added a comment -

            Please file any regressions separately, blocking this one and using the regression keyword.

            Show
            jglick Jesse Glick added a comment - Please file any regressions separately, blocking this one and using the regression keyword.

              People

              • Assignee:
                jglick Jesse Glick
                Reporter:
                owood Owen Wood
              • Votes:
                4 Vote for this issue
                Watchers:
                9 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: