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

NoSuchMethodError causing Pipeline editor to not see agent settings

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • None
    • 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

    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), imeredith and vivek 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

            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
            
            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
            kshultz Karl Shultz added a comment -

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

            kshultz Karl Shultz added a comment - Setting up a link relationship between the originally-reported issue and this one.
            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.

            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.
            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

            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
            abayer Andrew Bayer added a comment - PR up that should fix this at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/263
            abayer Andrew Bayer added a comment -

            Merged, releasing in Declarative 1.2.9 later today.

            abayer Andrew Bayer added a comment - Merged, releasing in Declarative 1.2.9 later today.

            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

            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
            bitwiseman Liam Newman added a comment -

            Bulk closing resolved issues.

            bitwiseman Liam Newman added a comment - Bulk closing resolved issues.

            People

              abayer Andrew Bayer
              kshultz Karl Shultz
              Votes:
              2 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: