Thanks for the update. I don't even remember the specific problem I had, but my shared library is working fine, so I must have figured it out. :)
On Thu, Mar 15, 2018 at 1:24 PM, Martín Pianello <[email protected]> wrote: > 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. -- 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/CAA5t8VoSNedUYfTCP4gSUfog6vLp8%3D43Juw9Qy4JcBHQwtzBsQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
