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

NoSuchMethodError causing Pipeline editor to not see agent settings

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Labels:
      None
    • Environment:
      Jenkins:
      - Core 2.116
      - Blue Ocean 1.5.0
      - Declarative 1.2.8
      - Experimental update center everything else

      Client:
      - Fedora workstation, updated and running the latest available version of Chrome
    • Similar Issues:

      Description

      Summary
      After taking the upgrade to Declarative 1.2.8, previously working Blue Ocean pipelines don't work correctly inside the editor. The editor still works, but the ability to change the agent type has gone missing. This was originally reported as Blue Ocean bug JENKINS-50805.

      Steps to recreate
      1. Set up Blue Ocean to connect to a previously working Pipeline, or open a preexisting Pipeline.

      2. Launch the pipeline editor, and notice that there's no "Agent" settings available:

      3. In the Jenkins log, you'll see the following InvocationTargetException, caused by a NoSuchMethodException:

      Apr 16, 2018 10:29:19 PM org.eclipse.jetty.server.handler.ContextHandler$Context log
      WARNING: Error while serving http://172.18.40.95:8080/blue/rest/pipeline-metadata/agentMetadata
      java.lang.reflect.InvocationTargetException
      	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:347)
      	at org.kohsuke.stapler.ForwardingFunction.invoke(ForwardingFunction.java:63)
      	at io.jenkins.blueocean.commons.stapler.TreeResponse$Processor.invoke(TreeResponse.java:43)
      	at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
      	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
      	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
      	at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)
      	at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      	at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      	at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:686)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      	at org.kohsuke.stapler.MetaClass$10.dispatch(MetaClass.java:374)
      	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
      	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
      	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:841)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
      	at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      	at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      	at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)
      	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
      	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:105)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	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:90)
      	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
      	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
      	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
      	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
      	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
      	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
      	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
      	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
      	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
      	at org.eclipse.jetty.server.Server.handle(Server.java:564)
      	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
      	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
      	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
      	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
      	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
      	at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
      	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: java.lang.NoSuchMethodError: org.jenkinsci.plugins.pipeline.modeldefinition.agent.DeclarativeAgentDescriptor.all()Lhudson/ExtensionList;
      	at io.blueocean.rest.pipeline.editor.PipelineMetadataService.doAgentMetadata(PipelineMetadataService.java:70)
      	at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:625)
      	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
      	... 86 more
      
      

      While talking it out on Gitter (and while I was in the car), Ivan Meredith and Vivek Pandey wrote about the changed method signature in 1.28:

      Old:

      public static ExtensionList<DeclarativeAgentDescriptor> all() {
              return ExtensionList.lookup(DeclarativeAgentDescriptor.class);
          }
      

      New:

          public static List<DeclarativeAgentDescriptor> all() {
              ExtensionList<DeclarativeAgentDescriptor> descs = ExtensionList.lookup(DeclarativeAgentDescriptor.class);
              return descs.stream().sorted(Comparator.comparing(DeclarativeAgentDescriptor::getName)).collect(Collectors.toList());
          }
      

        Attachments

          Issue Links

            Activity

            Hide
            kshultz Karl Shultz added a comment -

            Can also be recreated via:

            docker run \
            --rm \
            -u root \
            -p 8080:8080 \
            -v jenkins-data:/var/jenkins_home \
            -v /var/run/docker.sock:/var/run/docker.sock \
            -v "$HOME":/home \
            jenkinsci/blueocean
            
            Show
            kshultz Karl Shultz added a comment - Can also be recreated via: docker run \ --rm \ -u root \ -p 8080:8080 \ -v jenkins-data:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$HOME":/home \ jenkinsci/blueocean
            Hide
            kshultz Karl Shultz added a comment -

            Setting up a link relationship between the originally-reported issue and this one.

            Show
            kshultz Karl Shultz added a comment - Setting up a link relationship between the originally-reported issue and this one.
            Hide
            vivek Vivek Pandey added a comment -

            Basically if users upgrade to pipeline-model-definition 1.2.8, this incompatibility will cause pipeline editor to be non-functional.

            Show
            vivek Vivek Pandey added a comment - Basically if users upgrade to pipeline-model-definition 1.2.8, this incompatibility will cause pipeline editor to be non-functional.
            Hide
            abobwhite Alex White added a comment -

            I noticed this issue yesterday after using Pipeline and Blue Ocean for the first time and was very confused. I tried downgrading to Pipeline 2.4 from 2.5 but it still appears that `pipeline-model-definition 1.2.8` is the dependency there. I don't see a way to easily downgrade that specific dependency

            Show
            abobwhite Alex White added a comment - I noticed this issue yesterday after using Pipeline and Blue Ocean for the first time and was very confused. I tried downgrading to Pipeline 2.4 from 2.5 but it still appears that `pipeline-model-definition 1.2.8` is the dependency there. I don't see a way to easily downgrade that specific dependency
            Hide
            abayer Andrew Bayer added a comment -
            Show
            abayer Andrew Bayer added a comment - PR up that should fix this at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/263
            Hide
            abayer Andrew Bayer added a comment -

            Merged, releasing in Declarative 1.2.9 later today.

            Show
            abayer Andrew Bayer added a comment - Merged, releasing in Declarative 1.2.9 later today.
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Andrew Bayer
            Path:
            pipeline-model-definition/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/generator/AgentDirective.java
            pipeline-model-extensions/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/agent/DeclarativeAgentDescriptor.java
            http://jenkins-ci.org/commit/pipeline-model-definition-plugin/6b0e8f283437061169ae87dab25d44175e0afad0
            Log:
            [FIXED JENKINS-50833] Revert DeclarativeAgentDescriptor.all() signature

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-definition/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/generator/AgentDirective.java pipeline-model-extensions/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/agent/DeclarativeAgentDescriptor.java http://jenkins-ci.org/commit/pipeline-model-definition-plugin/6b0e8f283437061169ae87dab25d44175e0afad0 Log: [FIXED JENKINS-50833] Revert DeclarativeAgentDescriptor.all() signature

              People

              • Assignee:
                abayer Andrew Bayer
                Reporter:
                kshultz Karl Shultz
              • Votes:
                2 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: