Hi David,

A year later, you may have solved the issue or switched to a different 
solution altogether. Anyway, I stumbled across the same issue and coudn't 
find a definitive solution.

So, after some trial & error, I wanted to post how I solved this.

I followed the project structure proposed 
in https://github.com/jenkinsci/workflow-cps-plugin/blob/master/README.md
So, the code in "vars/myClass.groovy" is just glue code calling whatever 
classes there is in "src/....groovy" witch implements the real logic.
Also, according 
https://github.com/mkobit/jenkins-pipeline-shared-libraries-gradle-plugin/issues/17
 I 
added the necessary @NonCPS annotations above the methods in classes 
located under src/, not in var/ (didn't work)




El lunes, 6 de febrero de 2017, 14:23:18 (UTC-3), David Karr escribió:
>
> I'm trying to move duplicated methods in several pipeline scripts to a 
> shared library.  My first attempt, moving an enum type, worked fine.  My 
> next test is moving a method annotated with "@NonCPS".  I noticed in the 
> doc about writing shared libraries (
> https://jenkins.io/doc/book/pipeline/shared-libraries/), it had the 
> following statement:
>
> The Groovy source files in these directories get the same “CPS 
>> transformation” as in Scripted Pipeline.
>
>
> I have no idea what that means, but I suppose it might have some relevant 
> to my problem.
>
> The method I'm trying to move is simply this:
> @NonCPS
> def computeCauseData() {
>     def result    = ""
>     def causeActions = currentBuild.rawBuild.getAction(hudson.model.
> CauseAction)
>     for (action in causeActions) {
>         println "action[${action}] displayName[${action.displayName}]"
>         for (cause in action.causes) {
>             println "cause[${cause}] 
> shortDescription[${cause.shortDescription}]"
>             result    = "${cause.shortDescription}."
>             if (cause instanceof Cause.LegacyCodeCause) {
>             }
>             else if (cause instanceof TimerTrigger.TimerTriggerCause) {
>             }
>             else if (cause instanceof Cause.RemoteCause) {
>                 Cause.RemoteCause    remoteCause    = (Cause.RemoteCause) 
> cause
>                 result    = "${cause.shortDescription}: 
> Addr[${remoteCause.addr}] Note[${remoteCause.note}]."
>             }
>             else if (cause instanceof Cause.UserIdCause) {
>             }
>             else if (cause instanceof SCMTrigger.SCMTriggerCause) {
>                 SCMTrigger.SCMTriggerCause    scmTriggerCause    = (
> SCMTrigger.SCMTriggerCause) cause
>                 println "scmTriggerCause[${scmTriggerCause}]"
>             }
>             else if (cause instanceof GitStatus.CommitHookCause) {
>                 GitStatus.CommitHookCause    commitHookCause    = (
> GitStatus.CommitHookCause) cause
>                 String    sha1    = commitHookCause.sha1
>                 println "sha1[${sha1}]"
>             }
>             else {
>     
>             }
>         }
>     }
>     
>     return result
> }
>
> This works fine in the pipeline script. When I moved it to my shared 
> library (in "vars/computeCauseData.groovy") and commented out the 
> definition in the pipeline script, and then ran my test, I got the 
> following:
>
> 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)
>
>
> In the past, I've avoid serialization errors by nulling out variables 
> before they cross a scope. I tried modifying this method, simply nulling 
> out everything but "result" right after their last use, and that made no 
> difference.  Same error.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/9269dc02-0783-4101-8739-1e3f6e9edd15%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to