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

StackOverflowError on boot related to QueueItemAuthenticatorConfiguration

    XMLWordPrintable

Details

    Description

      After latest container (LTS) and plugin updates, booting the jenkins results in huge stacktraces caused by a stackoverflow error. The result is that the Jenkins seems available, the queue is filled but items cannot be worked on, because a class has not been properly loaded on boot:

      java.lang.IllegalStateException: The class jenkins.security.QueueItemAuthenticatorConfiguration was not found, potentially not yet loadedjava.lang.IllegalStateException: The class jenkins.security.QueueItemAuthenticatorConfiguration was not found, potentially not yet loaded at hudson.ExtensionList.getInstance(ExtensionList.java:166) at jenkins.security.QueueItemAuthenticatorConfiguration.get(QueueItemAuthenticatorConfiguration.java:61) at jenkins.security.QueueItemAuthenticatorConfiguration$ProviderImpl.getAuthenticators(QueueItemAuthenticatorConfiguration.java:70) at jenkins.security.QueueItemAuthenticatorProvider$IteratorImpl.hasNext(QueueItemAuthenticatorProvider.java:44) at hudson.model.Queue$Item.authenticate(Queue.java:2332) 

      The relevant source of evil is the following stacktrace which I will attach in full as a file.

      To make this pop up in searches I paste an excerpt of the stack trace here.

      at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.thoughtworks.xstream.converters.reflection.SerializationMethodInvoker.callReadResolve(SerializationMethodInvoker.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:268)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
      	at hudson.util.CopyOnWriteList$ConverterImpl.unmarshal(CopyOnWriteList.java:197)
      	at hudson.util.DescribableList$ConverterImpl.unmarshal(DescribableList.java:275)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
      	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
      	at hudson.util.XStream2.unmarshal(XStream2.java:161)
      	at hudson.util.XStream2.unmarshal(XStream2.java:132)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
      	at hudson.XmlFile.unmarshal(XmlFile.java:180)
      	at hudson.XmlFile.unmarshal(XmlFile.java:163)
      	at hudson.model.Descriptor.load(Descriptor.java:914)
      	at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at hudson.ExtensionFinder$GuiceFinder$SezpozModule.onProvision(ExtensionFinder.java:601)
      	at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
      	at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
      	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:87)
      	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      	at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:440)
      	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
      	at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:402)
      	at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:393)
      	at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:344)
      	at hudson.ExtensionList.load(ExtensionList.java:381)
      	at hudson.ExtensionList.ensureLoaded(ExtensionList.java:317)
      	at hudson.ExtensionList.getComponents(ExtensionList.java:183)
      	at hudson.DescriptorExtensionList.load(DescriptorExtensionList.java:194)
      	at hudson.ExtensionList.ensureLoaded(ExtensionList.java:317)
      	at hudson.ExtensionList.iterator(ExtensionList.java:172)
      	at hudson.ExtensionList.getInstance(ExtensionList.java:162)
      	at jenkins.security.QueueItemAuthenticatorConfiguration.get(QueueItemAuthenticatorConfiguration.java:61)
      	at org.jenkinsci.plugins.authorizeproject.ProjectQueueItemAuthenticator.getConfigured(ProjectQueueItemAuthenticator.java:178)
      	at org.jenkinsci.plugins.authorizeproject.ProjectQueueItemAuthenticator.isConfigured(ProjectQueueItemAuthenticator.java:190)
      	at org.jenkinsci.plugins.authorizeproject.AuthorizeProjectStrategy.checkUnsecuredConfiguration(AuthorizeProjectStrategy.java:186)
      	at org.jenkinsci.plugins.authorizeproject.AuthorizeProjectStrategy.readResolve(AuthorizeProjectStrategy.java:176)
      	at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.thoughtworks.xstream.converters.reflection.SerializationMethodInvoker.callReadResolve(SerializationMethodInvoker.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:268)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
      	at hudson.util.CopyOnWriteList$ConverterImpl.unmarshal(CopyOnWriteList.java:197)
      	at hudson.util.DescribableList$ConverterImpl.unmarshal(DescribableList.java:275)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
      	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
      	at hudson.util.XStream2.unmarshal(XStream2.java:161)
      	at hudson.util.XStream2.unmarshal(XStream2.java:132)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
      	at hudson.XmlFile.unmarshal(XmlFile.java:180)
      	at hudson.XmlFile.unmarshal(XmlFile.java:163)
      	at hudson.model.Descriptor.load(Descriptor.java:914)
      	at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at hudson.ExtensionFinder$GuiceFinder$SezpozModule.onProvision(ExtensionFinder.java:601)
      	at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
      	at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
      	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:87)
      	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      	at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:440)
      	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
      	at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:402)
      	at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:393)
      	at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:344)
      	at hudson.ExtensionList.load(ExtensionList.java:381)
      	at hudson.ExtensionList.ensureLoaded(ExtensionList.java:317)
      	at hudson.ExtensionList.getComponents(ExtensionList.java:183)
      	at hudson.DescriptorExtensionList.load(DescriptorExtensionList.java:194)
      	at hudson.ExtensionList.ensureLoaded(ExtensionList.java:317)
      	at hudson.ExtensionList.iterator(ExtensionList.java:172)
      	at hudson.ExtensionList.getInstance(ExtensionList.java:162)
      	at jenkins.security.QueueItemAuthenticatorConfiguration.get(QueueItemAuthenticatorConfiguration.java:61)
      	at org.jenkinsci.plugins.authorizeproject.ProjectQueueItemAuthenticator.getConfigured(ProjectQueueItemAuthenticator.java:178)
      	at org.jenkinsci.plugins.authorizeproject.ProjectQueueItemAuthenticator.isConfigured(ProjectQueueItemAuthenticator.java:190)
      	at org.jenkinsci.plugins.authorizeproject.AuthorizeProjectStrategy.checkUnsecuredConfiguration(AuthorizeProjectStrategy.java:186)
      	at org.jenkinsci.plugins.authorizeproject.AuthorizeProjectStrategy.readResolve(AuthorizeProjectStrategy.java:176)
      	at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.thoughtworks.xstream.converters.reflection.SerializationMethodInvoker.callReadResolve(SerializationMethodInvoker.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:268)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
      	at hudson.util.CopyOnWriteList$ConverterImpl.unmarshal(CopyOnWriteList.java:197)
      	at hudson.util.DescribableList$ConverterImpl.unmarshal(DescribableList.java:275)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at hudson.util.RobustReflectionConverter.unmarshalField(RobustReflectionConverter.java:390)
      	at hudson.util.RobustReflectionConverter.doUnmarshal(RobustReflectionConverter.java:328)
      	at hudson.util.RobustReflectionConverter.unmarshal(RobustReflectionConverter.java:267)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
      	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
      	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
      	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1189)
      	at hudson.util.XStream2.unmarshal(XStream2.java:161)
      	at hudson.util.XStream2.unmarshal(XStream2.java:132)
      	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1173)
      	at hudson.XmlFile.unmarshal(XmlFile.java:180)
      	at hudson.XmlFile.unmarshal(XmlFile.java:163)
      	at hudson.model.Descriptor.load(Descriptor.java:914)
      	at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at hudson.ExtensionFinder$GuiceFinder$SezpozModule.onProvision(ExtensionFinder.java:601)
      	at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
      	at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
      	at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:87)
      	at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      	at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      	at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:440)
      	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      	at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
      	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      	at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
      	at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:402)
      	at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:393)
      	at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:344)
      	at hudson.ExtensionList.load(ExtensionList.java:381)
      	at hudson.ExtensionList.ensureLoaded(ExtensionList.java:317)
      	at hudson.ExtensionList.getComponents(ExtensionList.java:183)
      

      Important note: I "fixed" my jenkins by manually emptying the queue and moving my init.groovy away. I.e., only this snippet (which has been working until now) is now causing this behavior:

      After a reboot without this hook, everything works as expected. However, I really need this hook as a workaround for another bug in a different plugin. And as I said - this has been working for months before.

      Attachments

        Issue Links

          Activity

            laowoniu0912 xiao added a comment -

            when i upgrade from 2.277.2 to 2.277.4,the same problem arises。Super depressed 。

            laowoniu0912 xiao added a comment - when i upgrade from 2.277.2 to 2.277.4,the same problem arises。Super depressed 。

            not entirely sure it is helpful other than to say that it is nearing November and this is still not fixed. In any case, we are on Jenkins 2.263.4

            douglasawh Doug Whitfield added a comment - not entirely sure it is helpful other than to say that it is nearing November and this is still not fixed. In any case, we are on Jenkins 2.263.4
            tomdevops Tom Lorentsen added a comment -

            Had this problem on when upgrading to 2.319.1. Rolled back to snapshot twice! The workaround didn't appear to work for me

            tomdevops Tom Lorentsen added a comment - Had this problem on when upgrading to 2.319.1. Rolled back to snapshot twice! The workaround didn't appear to work for me
            sephirothj Ronny Perinke added a comment -

            not entirely sure it is helpful other than to say that it is nearing November and this is still not fixed. In any case, we are on Jenkins 2.263.4

            Now its May 2022 with Jenkins 2.332 and Access Control for Builds still mentions Authorize Project Plugin as the one to use. Or are there meanwhile other plugins that can do this?

            sephirothj Ronny Perinke added a comment - not entirely sure it is helpful other than to say that it is nearing November and this is still not fixed. In any case, we are on Jenkins 2.263.4 Now its May 2022 with Jenkins 2.332 and Access Control for Builds still mentions Authorize Project Plugin as the one to use. Or are there meanwhile other plugins that can do this?
            jglick Jesse Glick added a comment -

            https://github.com/jenkinsci/jenkins/pull/6222 and no, there is no real replacement.

            jglick Jesse Glick added a comment - https://github.com/jenkinsci/jenkins/pull/6222 and no, there is no real replacement.

            People

              Unassigned Unassigned
              tumbl3w33d Sir Tumbleweed
              Votes:
              34 Vote for this issue
              Watchers:
              42 Start watching this issue

              Dates

                Created:
                Updated: