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

Declarative Pipeline using a bugged shared library produces a NotSerializableException

      Summary:
      A Declarative Jenkinsfile which is using a Library that has a syntax error in it can create a NotSerializableException.

      Prerequisites:
      1. A repo with a shared library, in the form of repo-name/blob/master/vars/Variables.groovy. The library needs to be bugged. I used this (note the parenthesis ( ) around the values for agentNames[] instead of square brackets [ ]:

      /* 
      Use these with your declarative pipelines.
      */
      
      // Let's insert this purposely bugged String array, to  see if 
      // Jenkins picks up the library at all.
      String[] agentNames = ("linux","windows","other")
      int FILE_SIZE = 3333
      // String FILE_SIZE = "4444"
      
      

      2. This shared library needs to be set up in /configure, under Global Pipeline Libraries:

      3. A Jenkinsfile that makes use of this shared library (I'll attach the one I've used). I've been able to recreate this both as a mulibranch pipeline job from a GitHub Enterprise repo, and as a standalone Pipeline job.

      Steps to recreate:
      1. Create your job with the following Jenkinsfile:

      pipeline {
      
          libraries {
              lib("declarative-libs")
          }
      
          agent {
              label ("linux")
          }
      
          stages {
              stage('Set file size with a shared lib, WOW') {
                  steps {
                      echo "--> SIZE_OF_GIBBERISH_FILE is ${Variables.SIZE_OF_GIBBERISH_FILE}"
                      script {
                          int randomFileSize = "${Variables.SIZE_OF_GIBBERISH_FILE}"
                          stage ("Script stage") {
                              for (int j = 0; j < 5; j++) {
                                  node {
                                      sh "for i in `seq 1 100`; do cat /dev/urandom | env LC_CTYPE=c tr -dc \'[:alpha:]\' | head -c $randomFileSize; done"
                                  }
                              }
                          }
                      }                      
                  }
              }
          } // end stages
       }
      

      2. Run the build.

      3. Observe a NotSerializableException in the console output:

      Started by user admin
      [Pipeline] library
      Loading library declarative-libs@master
       > git rev-parse --is-inside-work-tree # timeout=10
      Setting origin to https://github.beescloud.com/dev1/declarative-libs.git
       > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
      Fetching origin...
      Fetching upstream changes from origin
       > git --version # timeout=10
      using GIT_ASKPASS to set credentials dev1 with Viva
       > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
       > git rev-parse master^{commit} # timeout=10
       > git rev-parse origin/master^{commit} # timeout=10
       > git rev-parse --is-inside-work-tree # timeout=10
      Fetching changes from the remote Git repository
       > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
      Fetching without tags
      Fetching upstream changes from https://github.beescloud.com/dev1/declarative-libs.git
       > git --version # timeout=10
      using GIT_ASKPASS to set credentials dev1 with Viva
       > git fetch --no-tags --progress https://github.beescloud.com/dev1/declarative-libs.git +refs/heads/master:refs/remotes/origin/master
      Checking out Revision 1fb446ab993643a4641b0729160affa02ab817e0 (master)
      Commit message: "re-bug it."
       > git config core.sparsecheckout # timeout=10
       > git checkout -f 1fb446ab993643a4641b0729160affa02ab817e0
       > git rev-list 82ad86a376a88035ba4f2446e74fe128d4826927 # timeout=10
      [Pipeline] node
      Running on 14-agent in /home/ec2-user/jenkins/jenkins/workspace/aa-serialization-thing
      [Pipeline] {
      [Pipeline] stage
      [Pipeline] { (Set file size with a shared lib, WOW)
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      an exception which occurred:
      	in field collector
      	in field locals
      	in field parent
      	in field parent
      	in field capture
      	in field def
      	in field delegate
      	in field closures
      	in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@39981842
      Caused: java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
      	at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
      	at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
      	at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
      	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
      	at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
      	at java.util.HashMap.writeObject(HashMap.java:1354)
      	at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
      	at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
      	at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
      	at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
      	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
      	at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
      	at java.util.HashMap.writeObject(HashMap.java:1354)
      	at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
      	at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
      	at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58)
      	at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)
      	at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:140)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:458)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:434)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:422)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:362)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
      	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
      	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)
      Finished: FAILURE
      

          [JENKINS-46698] Declarative Pipeline using a bugged shared library produces a NotSerializableException

          Karl Shultz created issue -
          Karl Shultz made changes -
          Assignee New: Andrew Bayer [ abayer ]
          Karl Shultz made changes -
          Description Original: *Summary:*
          A Declarative Jenkinsfile which is using a Library that has a syntax error in it can create a NotSerializableException.

          *Prerequisites:*
          1. A repo with a shared library, in the form of {{repo-name/blob/master/vars/Variables.groovy}}. The library needs to be bugged. I used this:

          {code:none}
          /*
          Use these with your declarative pipelines.
          */

          // Let's insert this purposely bugged String array, to see if
          // Jenkins picks up the library at all.
          String[] agentNames = ("linux","windows","other")
          int FILE_SIZE = 3333
          // String FILE_SIZE = "4444"

          {code}

          2. This shared library needs to be set up in /configure, under Global Pipeline Libraries:

           !image-2017-09-06-21-03-06-958.png|thumbnail!

          3. A Jenkinsfile that makes use of this shared library (I'll attach the one I've used). I've been able to recreate this both as a mulibranch pipeline job from a GitHub Enterprise repo, and as a standalone Pipeline job.

          *Steps to recreate:*
          1. Create your job with the following Jenkinsfile:

          {code:none}
          pipeline {

              libraries {
                  lib("declarative-libs")
              }

              agent {
                  label ("linux")
              }

              stages {
                  stage('Set file size with a shared lib, WOW') {
                      steps {
                          echo "--> SIZE_OF_GIBBERISH_FILE is ${Variables.SIZE_OF_GIBBERISH_FILE}"
                          script {
                              int randomFileSize = "${Variables.SIZE_OF_GIBBERISH_FILE}"
                              stage ("Script stage") {
                                  for (int j = 0; j < 5; j++) {
                                      node {
                                          sh "for i in `seq 1 100`; do cat /dev/urandom | env LC_CTYPE=c tr -dc \'[:alpha:]\' | head -c $randomFileSize; done"
                                      }
                                  }
                              }
                          }
                      }
                  }
              } // end stages
           }
          {code}

          2. Run the build.

          3. Observe a NotSerializableException in the console output:

          {code:none}
          Started by user admin
          [Pipeline] library
          Loading library declarative-libs@master
           > git rev-parse --is-inside-work-tree # timeout=10
          Setting origin to https://github.beescloud.com/dev1/declarative-libs.git
           > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
          Fetching origin...
          Fetching upstream changes from origin
           > git --version # timeout=10
          using GIT_ASKPASS to set credentials dev1 with Viva
           > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
           > git rev-parse master^{commit} # timeout=10
           > git rev-parse origin/master^{commit} # timeout=10
           > git rev-parse --is-inside-work-tree # timeout=10
          Fetching changes from the remote Git repository
           > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
          Fetching without tags
          Fetching upstream changes from https://github.beescloud.com/dev1/declarative-libs.git
           > git --version # timeout=10
          using GIT_ASKPASS to set credentials dev1 with Viva
           > git fetch --no-tags --progress https://github.beescloud.com/dev1/declarative-libs.git +refs/heads/master:refs/remotes/origin/master
          Checking out Revision 1fb446ab993643a4641b0729160affa02ab817e0 (master)
          Commit message: "re-bug it."
           > git config core.sparsecheckout # timeout=10
           > git checkout -f 1fb446ab993643a4641b0729160affa02ab817e0
           > git rev-list 82ad86a376a88035ba4f2446e74fe128d4826927 # timeout=10
          [Pipeline] node
          Running on 14-agent in /home/ec2-user/jenkins/jenkins/workspace/aa-serialization-thing
          [Pipeline] {
          [Pipeline] stage
          [Pipeline] { (Set file size with a shared lib, WOW)
          [Pipeline] }
          [Pipeline] // stage
          [Pipeline] }
          [Pipeline] // node
          [Pipeline] End of Pipeline
          an exception which occurred:
          in field collector
          in field locals
          in field parent
          in field parent
          in field capture
          in field def
          in field delegate
          in field closures
          in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@39981842
          Caused: java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
          at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
          at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
          at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
          at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
          at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
          at java.util.HashMap.writeObject(HashMap.java:1354)
          at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
          at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
          at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
          at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
          at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
          at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
          at java.util.HashMap.writeObject(HashMap.java:1354)
          at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58)
          at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)
          at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:140)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:458)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:434)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:422)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:362)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
          at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
          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)
          Finished: FAILURE
          {code}
          New: *Summary:*
          A Declarative Jenkinsfile which is using a Library that has a syntax error in it can create a NotSerializableException.

          *Prerequisites:*
          1. A repo with a shared library, in the form of {{repo-name/blob/master/vars/Variables.groovy}}. The library needs to be bugged. I used this (note the parenthesis ( ) around the values for agentNames[] instead of square brackets [ ]:

          {code:none}
          /*
          Use these with your declarative pipelines.
          */

          // Let's insert this purposely bugged String array, to see if
          // Jenkins picks up the library at all.
          String[] agentNames = ("linux","windows","other")
          int FILE_SIZE = 3333
          // String FILE_SIZE = "4444"

          {code}

          2. This shared library needs to be set up in /configure, under Global Pipeline Libraries:

           !image-2017-09-06-21-03-06-958.png|thumbnail!

          3. A Jenkinsfile that makes use of this shared library (I'll attach the one I've used). I've been able to recreate this both as a mulibranch pipeline job from a GitHub Enterprise repo, and as a standalone Pipeline job.

          *Steps to recreate:*
          1. Create your job with the following Jenkinsfile:

          {code:none}
          pipeline {

              libraries {
                  lib("declarative-libs")
              }

              agent {
                  label ("linux")
              }

              stages {
                  stage('Set file size with a shared lib, WOW') {
                      steps {
                          echo "--> SIZE_OF_GIBBERISH_FILE is ${Variables.SIZE_OF_GIBBERISH_FILE}"
                          script {
                              int randomFileSize = "${Variables.SIZE_OF_GIBBERISH_FILE}"
                              stage ("Script stage") {
                                  for (int j = 0; j < 5; j++) {
                                      node {
                                          sh "for i in `seq 1 100`; do cat /dev/urandom | env LC_CTYPE=c tr -dc \'[:alpha:]\' | head -c $randomFileSize; done"
                                      }
                                  }
                              }
                          }
                      }
                  }
              } // end stages
           }
          {code}

          2. Run the build.

          3. Observe a NotSerializableException in the console output:

          {code:none}
          Started by user admin
          [Pipeline] library
          Loading library declarative-libs@master
           > git rev-parse --is-inside-work-tree # timeout=10
          Setting origin to https://github.beescloud.com/dev1/declarative-libs.git
           > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
          Fetching origin...
          Fetching upstream changes from origin
           > git --version # timeout=10
          using GIT_ASKPASS to set credentials dev1 with Viva
           > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
           > git rev-parse master^{commit} # timeout=10
           > git rev-parse origin/master^{commit} # timeout=10
           > git rev-parse --is-inside-work-tree # timeout=10
          Fetching changes from the remote Git repository
           > git config remote.origin.url https://github.beescloud.com/dev1/declarative-libs.git # timeout=10
          Fetching without tags
          Fetching upstream changes from https://github.beescloud.com/dev1/declarative-libs.git
           > git --version # timeout=10
          using GIT_ASKPASS to set credentials dev1 with Viva
           > git fetch --no-tags --progress https://github.beescloud.com/dev1/declarative-libs.git +refs/heads/master:refs/remotes/origin/master
          Checking out Revision 1fb446ab993643a4641b0729160affa02ab817e0 (master)
          Commit message: "re-bug it."
           > git config core.sparsecheckout # timeout=10
           > git checkout -f 1fb446ab993643a4641b0729160affa02ab817e0
           > git rev-list 82ad86a376a88035ba4f2446e74fe128d4826927 # timeout=10
          [Pipeline] node
          Running on 14-agent in /home/ec2-user/jenkins/jenkins/workspace/aa-serialization-thing
          [Pipeline] {
          [Pipeline] stage
          [Pipeline] { (Set file size with a shared lib, WOW)
          [Pipeline] }
          [Pipeline] // stage
          [Pipeline] }
          [Pipeline] // node
          [Pipeline] End of Pipeline
          an exception which occurred:
          in field collector
          in field locals
          in field parent
          in field parent
          in field capture
          in field def
          in field delegate
          in field closures
          in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@39981842
          Caused: java.io.NotSerializableException: org.codehaus.groovy.control.ErrorCollector
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
          at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
          at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
          at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
          at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
          at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
          at java.util.HashMap.writeObject(HashMap.java:1354)
          at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65)
          at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56)
          at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50)
          at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179)
          at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:344)
          at java.util.HashMap.internalWriteEntries(HashMap.java:1777)
          at java.util.HashMap.writeObject(HashMap.java:1354)
          at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:497)
          at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:271)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:976)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
          at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
          at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58)
          at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:111)
          at org.jenkinsci.plugins.workflow.support.pickles.serialization.RiverWriter.writeObject(RiverWriter.java:140)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:458)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:434)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgramIfPossible(CpsThreadGroup.java:422)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:362)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
          at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
          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)
          Finished: FAILURE
          {code}
          Andrew Bayer made changes -
          Link New: This issue duplicates JENKINS-40109 [ JENKINS-40109 ]
          Andrew Bayer made changes -
          Resolution New: Duplicate [ 3 ]
          Status Original: Open [ 1 ] New: Resolved [ 5 ]

            abayer Andrew Bayer
            kshultz Karl Shultz
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: