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

Cant update from 3.1.3 to 3.1.4 since it has breaking change expects class hudson.util.Secret but received class java.lang.String

      After updating from version 3.1.3 to 3.1.4 got the following exception

      java.lang.ClassCastException: class org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth.setApiToken() expects class hudson.util.Secret but received class java.lang.String
      

      Breaking change was done in commit https://github.com/jenkinsci/parameterized-remote-trigger-plugin/commit/2b2012d5ca5a11c05d5645acd895fdc2fd77e293

      Full stack is

      java.lang.ClassCastException: class org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth.setApiToken() expects class hudson.util.Secret but received class java.lang.String
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:492)
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:429)
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:331)
      Caused: java.lang.IllegalArgumentException: Could not instantiate {apiToken=hfdksdhjdsfds, userName=my_user@my_domain.com} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:334)
      	at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:208)
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:466)
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:429)
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:331)
      	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:269)
      	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:179)
      	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
      	at sun.reflect.GeneratedMethodAccessor2613.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:163)
      	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
      	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:157)
      	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:161)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
      	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
      Caused: java.lang.IllegalArgumentException: Could not instantiate {auth=@TokenAuth(apiToken=32dae841bc9f0e09b716c609ae8d9f0b,userName=my_user@my_domain.com), job=Remote_Job, maxConn=1, pollInterval=10, remoteJenkinsName=my_jenkins, useCrumbCache=true, useJobInfoCache=true} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.pipeline.RemoteBuildPipelineStep
      	at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:334)
      	at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:269)
      	at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:179)
      	at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
      	at sun.reflect.GeneratedMethodAccessor2613.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
      	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
      	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      	at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
      	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:163)
      	at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
      	at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:157)
      	at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:161)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:165)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
      	at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:135)
      	at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
      	at WorkflowScript.run(WorkflowScript:20)
      	at ___cps.transform___(Native Method)
      	at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:86)
      	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:113)
      	at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:83)
      	at sun.reflect.GeneratedMethodAccessor429.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      	at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.dispatch(CollectionLiteralBlock.java:55)
      	at com.cloudbees.groovy.cps.impl.CollectionLiteralBlock$ContinuationImpl.item(CollectionLiteralBlock.java:45)
      	at sun.reflect.GeneratedMethodAccessor430.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      	at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.java:21)
      	at com.cloudbees.groovy.cps.Next.step(Next.java:83)
      	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:174)
      	at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:163)
      	at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:129)
      	at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:268)
      	at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:163)
      	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:18)
      	at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:51)
      	at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:185)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:400)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$400(CpsThreadGroup.java:96)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:312)
      	at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:276)
      	at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:67)
      	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      	at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:131)
      	at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
      	at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
      	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:1149)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      	at java.lang.Thread.run(Thread.java:748)
      

          [JENKINS-63559] Cant update from 3.1.3 to 3.1.4 since it has breaking change expects class hudson.util.Secret but received class java.lang.String

          Alok Singh added a comment -

          Upvoting!!

          Alok Singh added a comment - Upvoting!!

          KaiHsiang Chang added a comment - - edited

          Need more info. here.

          Though I know there may be possibly incompatible configuration, however I can't reproduce it locally.

          Here's the config in 3.1.3, as you can see, the config is plaintext.  

           

          Then after I upgraded to 3.1.4, 

          Job can be correctly loaded as below.

          Remote job can be triggered correctly 

          Before I re-saved the job configuration, the configuration was the same as 3.1.3

          After I re-saved job configuration without any change, the configuration was saved as hashed text without any error.

          and still worked well. 

          BTW, I tested it on jenkins 1.642.3.

           

           

          KaiHsiang Chang added a comment - - edited Need more info. here. Though I know there may be possibly incompatible configuration, however I can't reproduce it locally. Here's the config in 3.1.3, as you can see, the config is plaintext.     Then after I upgraded to 3.1.4,  Job can be correctly loaded as below. Remote job can be triggered correctly  Before I re-saved the job configuration, the configuration was the same as 3.1.3 After I re-saved job configuration without any change, the configuration was saved as hashed text without any error. and still worked well.  BTW, I tested it on jenkins 1.642.3.    

          Tzach Solomon added a comment -

          cashlalala you are correct, lack of info on my part. Sorry.
          The problem is reproduced using pipelines remote build step with parameters. The parameters are String but the plugin wants it to cast it to Secret.

          Can you please first mark this build as a breaking change? Thanks

          Tzach Solomon added a comment - cashlalala you are correct, lack of info on my part. Sorry. The problem is reproduced using pipelines remote build step with parameters. The parameters are String but the plugin wants it to cast it to Secret. Can you please first mark this build as a breaking change? Thanks

          I marked v3.1.5 as breaking change and fixed/clarified some other issues. 

          For now, you can only set the tokens (api or bearer) from jenkins global configuration page and used the remote server directly in pipeline. You can not override (normally speaking, from GUI, pipeline generator.) the global auth with the token auth in pipeline. (Due to the security patch SECURITY-1625).

           

          Will have a improvement to let pipeline users to be able to configure token auth from GUI. May be like the credential configuration.

          I don't have time recently for this feature. So, if you're in a rush, PRs are welcome.

           

           

          KaiHsiang Chang added a comment - I marked v3.1.5 as breaking change and fixed/clarified some other issues.  For now, you can only set the tokens (api or bearer) from jenkins global configuration page and used the remote server directly in pipeline. You can not override (normally speaking, from GUI, pipeline generator.) the global auth with the token auth in pipeline. (Due to the security patch SECURITY-1625).   Will have a improvement to let pipeline users to be able to configure token auth from GUI. May be like the credential configuration. I don't have time recently for this feature. So, if you're in a rush, PRs are welcome.    

          Breaking change release

          KaiHsiang Chang added a comment - Breaking change release

          Tzach Solomon added a comment -

          cashlalala I don't see v3.1.5 as incompatible... am I missing something?

           
          Example of what I mean...

          Tzach Solomon added a comment - cashlalala I don't see v3.1.5 as incompatible... am I missing something?   Example of what I mean...

          tzach_solomon

          First, I just released v3.1.5.1. I removed the duplicated compatibility settings in POM which made the warning not working.  The commit is here if you're interested in.

          Second, the warning will show only when the plugin version is smaller or equal to 3.1.3.

           FYI.

          KaiHsiang Chang added a comment - tzach_solomon First, I just released v3.1.5.1. I removed the duplicated compatibility settings in POM which made the warning not working.  The commit is here if you're interested in. Second, the warning will show only when the plugin version is smaller or equal to 3.1.3.  FYI.

          Tzach Solomon added a comment -

          cashlalala thanks it's working now.

           

          Tzach Solomon added a comment - cashlalala thanks it's working now.  

          I also observe this issue on our Jenkins after updating the plugin to recent version.

          Jenkins version is 2.260

          Plugin version is 3.5.1 (we've upgraded from 3.1.1 if I'm not wrong)

          We're using plugin via the scripted pipeline. Here is a snippet from code:

          withCredentials([usernamePassword(credentialsId: <..>, passwordVariable: 'token', usernameVariable: 'userName')]) {
                                          buildUrl = triggerRemoteJob([
                                              job: env.remoteBuildJob,
                                              parameters: <...>,
                                              auth: TokenAuth(apiToken: token, userName: userName)
                                          ]).getBuildUrl() 

          Type of credentials being used is username with password.

           

          I see the below exception in job logs:

          java.lang.IllegalArgumentException: Could not instantiate {job=http://<...>/, parameters=<..>>, auth=@TokenAuth(apiToken=<...>,userName=<...>)} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.pipeline.RemoteBuildPipelineStep: java.lang.IllegalArgumentException: Could not instantiate {apiToken=<...>, userName=<...>} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth: java.lang.ClassCastException: class org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth.setApiToken() expects class hudson.util.Secret but received class java.lang.String 

          Mikhail Terentev added a comment - I also observe this issue on our Jenkins after updating the plugin to recent version. Jenkins version is 2.260 Plugin version is 3.5.1 (we've upgraded from 3.1.1 if I'm not wrong) We're using plugin via the scripted pipeline. Here is a snippet from code: withCredentials([usernamePassword(credentialsId: <..>, passwordVariable: 'token' , usernameVariable: 'userName' )]) { buildUrl = triggerRemoteJob([ job: env.remoteBuildJob, parameters: <...>, auth: TokenAuth(apiToken: token, userName: userName) ]).getBuildUrl() Type of credentials being used is username with password.   I see the below exception in job logs: java.lang.IllegalArgumentException: Could not instantiate {job=http: //<...>/, parameters=<..>>, auth=@TokenAuth(apiToken=<...>,userName=<...>)} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.pipeline.RemoteBuildPipelineStep: java.lang.IllegalArgumentException: Could not instantiate {apiToken=<...>, userName=<...>} for org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth: java.lang.ClassCastException: class org.jenkinsci.plugins.ParameterizedRemoteTrigger.auth2.TokenAuth.setApiToken() expects class hudson.util.Secret but received class java.lang. String

            cashlalala KaiHsiang Chang
            tzach_solomon Tzach Solomon
            Votes:
            2 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: