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

    XMLWordPrintable

Details

    Description

      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

      Attachments

        Issue Links

          Activity

            jglick Jesse Glick added a comment -

            No evident JavaScript errors in console.

            jglick Jesse Glick added a comment - No evident JavaScript errors in console.
            jglick 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.)

            jglick 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

            tom_gl 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_issue_link 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_issue_link 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

            People

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

              Dates

                Created:
                Updated:
                Resolved: