-
Bug
-
Resolution: Unresolved
-
Critical
-
None
-
Powered by SuggestiMate
Jenkins v2.101
Latest for all BlueOcean plugins (1.3.5)
When opening a job url for Blue Ocean, for example from Bitbucket pull request build status if the user isn't logged into Jenkins it shows:
HTTP ERROR 404
Problem accessing /job/power-designer/job/PR-157/3/display/redirect. Reason:
Not Found
When the user goes to the jenkins server and logs in the job url then works correctly. Blue Ocean job url needs to redirect user to a login screen instead of this 404 error.
[JENKINS-48903] Blue Ocean job gets 404 when user isn't logged in
It doesn't matter if its from bitbucket, its just that's how our users access the job. Basically, if you open the job URL, such as:
https://jenkins-local.com/blue/organizations/jenkins/my-project/detail/PR-17/2/pipeline/
when you are not logged into Jenkins, you get this:
This doesn't tell our users they need to login first. Now they would need to click "Open Dashboard", then "Login" which re-directs to the classic UI login page and once they log in it takes them to the main Blue Ocean landing page for the project and not back to the job. Pretty cumbersome.
It should recognize that the user isn't logged in and redirect to the login page and after logging in redirect back to the job.
My example is from a PR branch job, but the same thing happens for any branch job. This is using the Multibranch Pipeline.
This is affecting us at Box as well and is pretty irritating given how often we get logged out of jenkins.
Same here. pretty annoying. Somehow it makes Blue Ocean unusable for us, as the main page (INSTANCE//blue/pipelines/) is pretty slow since we have lots of jobs, and kind of hangs in there.
The strange thing is that this started happening without any plugin update. I'll try updating all the BO plugins to see if that makes a difference
This is the stack trace I'm getting when hitting this page
http://hudson:8081/hudson/blue/organizations/jenkins/JOB/detail/branchX/3/pipeline/
from a logged in user pressing the Open Blue Ocean link
Apr 13, 2018 6:37:27 PM hudson.ExpressionFactory2$JexlExpression evaluate WARNING: Caught exception evaluating: preloader.stateJson in /hudson/blue/organizations/jenkins/JOB/detail/branchX/3/pipeline/. Reason: java.lang.reflect.InvocationTargetException java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.commons.jexl.util.PropertyExecutor.execute(PropertyExecutor.java:125) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelGetterImpl.invoke(UberspectImpl.java:314) at org.apache.commons.jexl.parser.ASTArrayAccess.evaluateExpr(ASTArrayAccess.java:185) at org.apache.commons.jexl.parser.ASTIdentifier.execute(ASTIdentifier.java:75) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74) at org.apache.commons.jelly.tags.core.CoreTagLibrary$3.run(CoreTagLibrary.java:134) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53) at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112) at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:140) at org.kohsuke.stapler.IndexViewDispatcher.dispatch(IndexViewDispatcher.java:30) 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.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.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.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:135) at org.jenkinsci.plugins.corsfilter.AccessControlsFilter.doFilter(AccessControlsFilter.java:79) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at io.jenkins.blueocean.ResourceCacheControl.doFilter(ResourceCacheControl.java:134) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:232) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:209) at net.bull.javamelody.PluginMonitoringFilter.doFilter(PluginMonitoringFilter.java:88) at org.jvnet.hudson.plugins.monitoring.HudsonMonitoringFilter.doFilter(HudsonMonitoringFilter.java:113) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at org.jenkinsci.plugins.modernstatus.ModernStatusFilter.doFilter(ModernStatusFilter.java:52) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:59) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:138) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:50) 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 org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128) at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199) 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: com.fasterxml.jackson.core.io.JsonStringEncoder.quoteAsString(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)V at io.jenkins.blueocean.commons.stapler.export.JSONDataWriter.value(JSONDataWriter.java:112) at io.jenkins.blueocean.commons.stapler.export.JSONDataWriter.startObject(JSONDataWriter.java:154) at io.jenkins.blueocean.commons.stapler.export.Model.writeTo(Model.java:198) at io.jenkins.blueocean.commons.stapler.export.Model.writeTo(Model.java:219) at io.jenkins.blueocean.commons.stapler.export.Model.writeTo(Model.java:183) at io.jenkins.blueocean.commons.stapler.Export.toJson(Export.java:61) at io.jenkins.blueocean.commons.stapler.Export.toJson(Export.java:47) at io.jenkins.blueocean.preload.PipelineStatePreloader.getFetchData(PipelineStatePreloader.java:68) at io.jenkins.blueocean.commons.RESTFetchPreloader.getStateJson(RESTFetchPreloader.java:64) ... 150 more
Looks like some kind of class loader issue. Some other plugin serving different version of jackson libraries. Hard to tell whats causing it from stack trace .Whats your blueocean version. Please try upgrading to latest 1.5.0 and see if it makes difference. In any case your issue is different from what this JIRA is about so please open another JIRA.
at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.io.JsonStringEncoder.quoteAsString(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)V at
jhuffaker bhoppe Yes, it will be nice to have blueocean pages on detecting user is not logged in, redirects users to login page, otherwise its confusing. We expect it to work. Wonder if its because backend API not giving right status code or something else going on. Can you attach HAR file that demonstrates this behavior? network tab on browser dev tools should show this as well.
You should consider upgrading to 1.5.0, it has lots of fixes, perf improvements, details at https://wiki.jenkins.io/display/JENKINS/Blue+Ocean+Plugin.
Hi vivek , Thank you for coming back to me.
The issue initially started as this issue was described, that's why I piggyback on this issue without seeing the stack trace that I attached later.
I'm on the latest Jenkins, Blue Ocean plugins are 1.5.0
I'll update the rest of my plugins, in case, as you mentioned, other plugins are serving a different version of the jackson libraries. If I sill have the issue, I'll open a new JIRA issue
Hi,
Sorry for more noise in this ticket, but I just want to mention that I was able to solve the issue thanks to what vivek mentioned about the different versions of the jackson lib.
I run the following line in the Jenkins console to know from where I was getting the jackson-core lib from
println(com.fasterxml.jackson.core.io.JsonStringEncoder.class.getProtectionDomain().getCodeSource().getLocation().getPath());
I found that it was coming from:
/home/users/buildboy/lib
where buildboy is the users which I use to start Jenkins.
/home/users/buildboy/lib> ls | gep jackson -rw-rw-r-- 1 buildboy animation 46986 Feb 15 08:31 jackson-annotations-2.6.7.jar -rw-rw-r-- 1 buildboy animation 258919 Feb 15 08:31 jackson-core-2.6.7.jar -rw-rw-r-- 1 buildboy animation 1170668 Feb 15 08:31 jackson-databind-2.6.7.jar -rw-rw-r-- 1 buildboy animation 97809 Feb 15 08:31 jackson-datatype-jsr310-2.9.3.jar
I moved those libraries away and restarted Jenkins. Running the same command now in the Jenkins console
println(com.fasterxml.jackson.core.io.JsonStringEncoder.class.getProtectionDomain().getCodeSource().getLocation().getPath());
AntClassLoader[/var/hudson/plugins/pipeline-model-api/WEB-INF/lib/json-20090211.jar:/var/hudson/plugins/pipeline-model-api/WEB-INF/lib/jackson-core-2.2.2.jar:/var/hudson/plugins/pipeline-model-api/WEB-INF/lib/jackson-datatype-json-org-2.2.3.jar:/var/hudson/plugins/pipeline-model-api/WEB-INF/lib/pipeline-model-json-shaded-1.2.8.jar:/var/hudson/plugins/pipeline-model-api/WEB-INF/lib/pipeline-model-api.jar] /var/hudson/plugins/pipeline-model-api/WEB-INF/lib/jackson-core-2.2.2.jar
Now everything is working again, but I'm not sure how those libraries got there in the first place and not sure if the whole /home/users/buildboy/lib should be in the classpath
You get 404 only when accessed from bitbucket pr build status? Please provide more details, screen shots work best for us try to understand the problem.