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

Saving SecretBuildWrapper for the first time fails due to duplicated credentialsId field unless git also installed

      NPE when using secret files without git plugin installed

      javax.servlet.ServletException: java.lang.Error: Failed to instantiate class org.jenkinsci.plugins.credentialsbinding.impl.FileBinding from {"variable":"BINDING_VARIABLE","credentialsId":["6a26f748-94d4-4dcc-9ec5-8a8a78ccdc58",""],"stapler-class<span class="code-quote">":"org.jenkinsci.plugins.credentialsbinding.impl.FileBinding","$class<span class="code-quote">":"org.jenkinsci.plugins.credentialsbinding.impl.FileBinding"}
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:796)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
      	at org.kohsuke.stapler.MetaClass$5.doDispatch(MetaClass.java:233)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
      	at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
      	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:135)
      	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:126)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:80)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
      	at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
      	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
      	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
      	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
      	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553)
      	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
      	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
      	at org.eclipse.jetty.server.Server.handle(Server.java:499)
      	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
      	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
      	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
      	at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.Error: Failed to instantiate class org.jenkinsci.plugins.credentialsbinding.impl.FileBinding from {"variable":"BINDING_VARIABLE","credentialsId":["6a26f748-94d4-4dcc-9ec5-8a8a78ccdc58",""],"stapler-class<span class="code-quote">":"org.jenkinsci.plugins.credentialsbinding.impl.FileBinding","$class<span class="code-quote">":"org.jenkinsci.plugins.credentialsbinding.impl.FileBinding"}
      	at hudson.model.Descriptor.newInstance(Descriptor.java:598)
      	at hudson.model.Descriptor$NewInstanceBindInterceptor.instantiate(Descriptor.java:641)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:749)
      	at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:674)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:712)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:771)
      	at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:674)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:474)
      	at hudson.model.Descriptor.newInstance(Descriptor.java:590)
      	at hudson.util.DescribableList.rebuild(DescribableList.java:177)
      	at hudson.model.Project.submit(Project.java:234)
      	at hudson.model.Job.doConfigSubmit(Job.java:1221)
      	at hudson.model.AbstractProject.doConfigSubmit(AbstractProject.java:795)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:606)
      	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:324)
      	at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:52)
      	at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
      	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:167)
      	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:100)
      	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:124)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
      	... 58 more
      Caused by: java.lang.NullPointerException
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:719)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:771)
      	at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
      	at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:674)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
      	at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:474)
      	at hudson.model.Descriptor.newInstance(Descriptor.java:590)
      	... 86 more
      
      • Start a new jenkins instance from the 2.7.2 war file and in the setup wizard choose the plugins to install
      • Deselect all plugins but {credentials-binding}

        and continue with the installation

      • Go to [BASE_JENKINS_URL]/credentials/store/system/domain//newCredentials_ and add a new credential of type secret file and use the previously attached file as value, name it secretFile and save it
      • Create a new project of type FreeStyleProject and check the Use secret text(s) or file(s) box
      • Add a new binding of type Secret File with any variable name and using the previously created secretFile credential
      • Try to save the job, a NPE occurs

          [JENKINS-37707] Saving SecretBuildWrapper for the first time fails due to duplicated credentialsId field unless git also installed

          Jesse Glick added a comment -

          Reproducible even in 1.596.1 with credentials 1.23.

          Jesse Glick added a comment - Reproducible even in 1.596.1 with credentials 1.23.

          Jesse Glick added a comment -

          I think git is a red herring; AFAICT it is reproducible when ssh-credentials (a dependency of git) is not installed

          Jesse Glick added a comment - I think git is a red herring; AFAICT it is reproducible when ssh-credentials (a dependency of git ) is not installed

          Jesse Glick added a comment -

          Wrong, the presence of git itself does seem to trigger the difference.

          Tried comparing HTML in the form, but the number of generated strings is making this seem hopeless.

          Jesse Glick added a comment - Wrong, the presence of git itself does seem to trigger the difference. Tried comparing HTML in the form, but the number of generated strings is making this seem hopeless.

          Jesse Glick added a comment -

          Reproducible even when backing out both PR 15 & PR 17.

          Jesse Glick added a comment - Reproducible even when backing out both PR 15 & PR 17 .

          Jesse Glick added a comment -

          Only reproduce when configuring the build wrapper for the first time, not when reconfiguring a project that already had it.

          Jesse Glick added a comment - Only reproduce when configuring the build wrapper for the first time, not when reconfiguring a project that already had it.

          Jesse Glick added a comment -

          No evident JavaScript errors in console.

          Jesse Glick added a comment - No evident JavaScript errors in console.

          Jesse Glick added a comment -

          If no fix is forthcoming, I would recommend just disabling the credentials parameter support for now. It is probably rarely used, and certainly a lower priority than having basic fixed credentials working in freestyle projects. (Pipeline projects can use credentials parameters without the JavaScript hacks.)

          Jesse Glick added a comment - If no fix is forthcoming, I would recommend just disabling the credentials parameter support for now. It is probably rarely used, and certainly a lower priority than having basic fixed credentials working in freestyle projects. (Pipeline projects can use credentials parameters without the JavaScript hacks.)

          I think I've understood what the issue is. I've opened a PR for the credentials-plugin, because the issue seems to be in the JS library of the /lib/credentials:select Jelly tag.
          https://github.com/jenkinsci/credentials-plugin/pull/67

          Thomas de Grenier de Latour added a comment - I think I've understood what the issue is. I've opened a PR for the credentials-plugin, because the issue seems to be in the JS library of the /lib/credentials:select Jelly tag. https://github.com/jenkinsci/credentials-plugin/pull/67

          Code changed in jenkins
          User: Thomas de Grenier de Latour
          Path:
          src/main/resources/lib/credentials/select/select.js
          http://jenkins-ci.org/commit/credentials-plugin/c2840775a4a6b80a7bc2be5599cbff3967c1b421
          Log:
          JENKINS-37707 fix missing Behaviour in /lib/credentials:select

          When a credentials selector is dynamicaly added to the DOM and
          no Behaviour was specified yet (for instance, in JENKINS-37707,
          when adding a first Credentials Binding wrapper, and we don't
          have an other plugin, like Git, to ensure the credentials JS lib
          is already loaded in the page), then some new Behaviours are
          specified, and retro-applied to existing DOM elements (with
          Behaviour.applySubtree in a timeout function). It's a hack,
          which almost works, but there was an issue with elements with
          class 'credentials-select-control': there is a Behaviour specified
          for them, but Behaviours are only applied to their children, not
          themselves. That's what this (rather obvious) patch fixes.
          It seems to be enough to fix the error reported in JENKINS-37707.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Thomas de Grenier de Latour Path: src/main/resources/lib/credentials/select/select.js http://jenkins-ci.org/commit/credentials-plugin/c2840775a4a6b80a7bc2be5599cbff3967c1b421 Log: JENKINS-37707 fix missing Behaviour in /lib/credentials:select When a credentials selector is dynamicaly added to the DOM and no Behaviour was specified yet (for instance, in JENKINS-37707 , when adding a first Credentials Binding wrapper, and we don't have an other plugin, like Git, to ensure the credentials JS lib is already loaded in the page), then some new Behaviours are specified, and retro-applied to existing DOM elements (with Behaviour.applySubtree in a timeout function). It's a hack, which almost works, but there was an issue with elements with class 'credentials-select-control': there is a Behaviour specified for them, but Behaviours are only applied to their children, not themselves. That's what this (rather obvious) patch fixes. It seems to be enough to fix the error reported in JENKINS-37707 .

          Code changed in jenkins
          User: Stephen Connolly
          Path:
          src/main/resources/lib/credentials/select/select.js
          http://jenkins-ci.org/commit/credentials-plugin/219ea3243a187bed78545fc215aa282fabe25a31
          Log:
          Merge pull request #67 from thomasgl-orange/JENKINS-37707

          JENKINS-37707 fix missing Behaviour in /lib/credentials:select

          Compare: https://github.com/jenkinsci/credentials-plugin/compare/e0d05e2103b9...219ea3243a18

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Stephen Connolly Path: src/main/resources/lib/credentials/select/select.js http://jenkins-ci.org/commit/credentials-plugin/219ea3243a187bed78545fc215aa282fabe25a31 Log: Merge pull request #67 from thomasgl-orange/ JENKINS-37707 JENKINS-37707 fix missing Behaviour in /lib/credentials:select Compare: https://github.com/jenkinsci/credentials-plugin/compare/e0d05e2103b9...219ea3243a18

            tom_gl Thomas de Grenier de Latour
            rarabaolaza Raul Arabaolaza
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: