[JIRA] (JENKINS-39742) Active Choice Plugin should honor ParameterDefinition serializability (was: Active Choice Plugin in Pipelines throw NotSerializableException)

2 views
Skip to first unread message

frederic.chuong@gmail.com (JIRA)

unread,
Mar 3, 2017, 11:30:05 AM3/3/17
to jenkinsc...@googlegroups.com
Frédéric Chuong updated an issue
 
Jenkins / Bug JENKINS-39742
Active Choice Plugin should honor ParameterDefinition serializability (was: Active Choice Plugin in Pipelines throw NotSerializableException)
Change By: Frédéric Chuong
Summary: Active Choice Plugin should honor ParameterDefinition serializability (was: Active Choice Plugin in Pipelines throw NotSerializableException )
Labels: active-choices pipeline script-security
Since upgrading to Pipeline: Active Choices Plug-in: 1.5.1 the Groovy script is no longer serializable and therefore throws NotSerializableException when input is requested.

h3. Stacktrace
{noformat}
java.io.NotSerializableException: org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript
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.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.doWriteObject(RiverMarshaller.java:569)
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.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.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.TreeMap.writeObject(TreeMap.java:2434)
at sun.reflect.GeneratedMethodAccessor357.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
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:132)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:433)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.saveProgram(CpsThreadGroup.java:412)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:357)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:78)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:236)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:224)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:63)
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: an exception which occurred:
in field secureFallbackScript
in field script
in field parameters
in field input
in field step
in field threads
in object org.jenkinsci.plugins.workflow.cps.CpsThreadGroup@7145f3ac
{noformat}

h3. Pipeline Code

{code}
node {
    def inputValues
    def yesNo = readFile(env.JENKINS_ROOT + '/dropdowns/yesno.txt')
    
    stage('Build Properties') {
        inputValues = input(
            id: 'userInput', message: 'AutoDeploy', ok: 'GO GO GO',
            parameters: [
                [
                    $class: 'ChoiceParameter', choiceType: 'PT_RADIO', description: 'Auto-deploy after upload', filterable: false, name: 'autodeploy', randomName: 'choice-para-9552882322810329', script: [$class: 'GroovyScript', fallbackScript: [classpath: [], sandbox: true, script: ''], script: [classpath: [], sandbox: true, script: yesNo]]
                ]
            ]
        )
    }
}
{code}


h3. EDIT: Further analysis
The "{{Serializable}} chain" seems to be broken:
- Active Choice Plugin parameters implement {{Serializable}} via [{{ParameterDefinition}}|http://javadoc.jenkins-ci.org/index.html?hudson/model/ParameterDefinition.html] inheritance
- Those implementation can happen to [contain|https://github.com/jenkinsci/active-choices-plugin/blob/uno-choice-1.5.2/src/main/java/org/biouno/unochoice/AbstractScriptableParameter.java#L80] a non-transient [{{GroovyScript}}|https://github.com/jenkinsci/active-choices-plugin/blob/uno-choice-1.5.2/src/main/java/org/biouno/unochoice/model/GroovyScript.java#L51]
- {{GroovyScript}} *implements {{Serializable}}* (via [{{Script}}|https://github.com/jenkinsci/active-choices-plugin/blob/uno-choice-1.5.2/src/main/java/org/biouno/unochoice/model/Script.java#L36]) but also *[contains|https://github.com/jenkinsci/active-choices-plugin/blob/uno-choice-1.5.2/src/main/java/org/biouno/unochoice/model/GroovyScript.java#L69] a non-transient {{SecureGroovyScript}}*
- [{{SecureGroovyScript}}|https://github.com/jenkinsci/script-security-plugin/blob/script-security-1.27/src/main/java/org/jenkinsci/plugins/scriptsecurity/sandbox/groovy/SecureGroovyScript.java#L64] *does not implement {{Serializable}}*
Add Comment Add Comment
 
This message was sent by Atlassian JIRA (v7.1.7#71011-sha1:2526d7c)
Atlassian logo

frederic.chuong@gmail.com (JIRA)

unread,
Mar 3, 2017, 11:40:04 AM3/3/17
to jenkinsc...@googlegroups.com
Frédéric Chuong updated an issue


The Pipeline/Pipeline-input-step plugin happens to be one of the components making actual use of the _ParameterDefinition implements Serializable_ contract but this issue isn't strictly tied to pipelines.

chrissta@buffalo.edu (JIRA)

unread,
Oct 26, 2018, 10:04:02 AM10/26/18
to jenkinsc...@googlegroups.com
chris starling commented on Bug JENKINS-39742
 
Re: Active Choice Plugin should honor ParameterDefinition serializability (was: Active Choice Plugin in Pipelines throw NotSerializableException)

I'm wondering if pipeline support has been added since this ticket, or is there a plan to add support for it? 

This message was sent by Atlassian Jira (v7.11.2#711002-sha1:fdc329d)

andrew.bayer@gmail.com (JIRA)

unread,
Nov 19, 2018, 10:17:03 AM11/19/18
to jenkinsc...@googlegroups.com

ishagunjain@gmail.com (JIRA)

unread,
Feb 10, 2020, 11:10:03 AM2/10/20
to jenkinsc...@googlegroups.com
This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

stuff4ben@gmail.com (JIRA)

unread,
May 8, 2020, 12:53:02 PM5/8/20
to jenkinsc...@googlegroups.com

Would be nice to see if this could be fixed. Would love to use ActiveChoices in my declarative pipelines. Ran into this issue today so I'm falling back to a freestyle job.

This message was sent by Atlassian Jira (v7.13.12#713012-sha1:6e07c38)
Atlassian logo
Reply all
Reply to author
Forward
0 new messages