bitbucket-push-and-pull-request-plugin icon indicating copy to clipboard operation
bitbucket-push-and-pull-request-plugin copied to clipboard

NullPointerException when receiving payload

Open rotorsolutions opened this issue 3 years ago • 10 comments

Hi,

I try to setup Bitbucket PR building but I receive the following error when receiving the payload. This causes a 500 response in Bitbucket and prevents the job from building.

Jenkins version: 2.319.3 Plugin version: 2.8.1

Output in Jenkins system log:

Error while serving https://REDACTED/
java.lang.NullPointerException
	at io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe.triggerScm(BitBucketPPRJobProbe.java:107)
	at io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe.lambda$triggerMatchingJobs$1(BitBucketPPRJobProbe.java:94)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
	at io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe.triggerMatchingJobs(BitBucketPPRJobProbe.java:92)
	at io.jenkins.plugins.bitbucketpushandpullrequest.processor.BitBucketPPRPullRequestCloudPayloadProcessor.processPayload(BitBucketPPRPullRequestCloudPayloadProcessor.java:46)
	at io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRHookReceiver.process(BitBucketPPRHookReceiver.java:108)
	at io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRHookReceiver.doIndex(BitBucketPPRHookReceiver.java:71)
	at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)
	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:393)
Caused: java.lang.reflect.InvocationTargetException
	at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:397)
	at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:405)
	at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:208)
	at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:141)
	at org.kohsuke.stapler.IndexDispatcher.dispatch(IndexDispatcher.java:27)
	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)
	at org.kohsuke.stapler.MetaClass$9.dispatch(MetaClass.java:457)
	at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:766)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:898)
	at org.kohsuke.stapler.Stapler.invoke(Stapler.java:694)
	at org.kohsuke.stapler.Stapler.service(Stapler.java:240)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
	at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:156)
	at jenkins.security.ResourceDomainFilter.doFilter(ResourceDomainFilter.java:80)
	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
	at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)
	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
	at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:125)
	at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:153)
	at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:159)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRCrumbExclusion.process(BitBucketPPRCrumbExclusion.java:58)
	at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:127)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:92)
	at jenkins.security.AcegiSecurityExceptionFilter.doFilter(AcegiSecurityExceptionFilter.java:52)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:53)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:133)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:92)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:97)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
	at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:62)
	at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:97)
	at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:109)
	at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:51)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:85)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at jenkins.security.SuspiciousRequestFilter.doFilter(SuspiciousRequestFilter.java:39)
	at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
	at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:578)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:516)
	at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
	at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.base/java.lang.Thread.run(Thread.java:829)

rotorsolutions avatar Feb 11 '22 16:02 rotorsolutions

The same!

y0zg avatar Feb 15 '22 14:02 y0zg

PS, I do get several of these lines before the NullPointerException:

Feb 16, 2022 7:15:19 AM INFO io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRHookReceiver doIndex
Received POST request over Bitbucket hook
Feb 16, 2022 7:15:19 AM INFO io.jenkins.plugins.bitbucketpushandpullrequest.processor.BitBucketPPRPayloadProcessorFactory createProcessor
Create BitBucketPPRPullRequestCloudPayloadProcessor
Feb 16, 2022 7:15:19 AM WARNING io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe lambda$triggerMatchingJobs$1
Trigger not set
Feb 16, 2022 7:15:19 AM WARNING io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe lambda$triggerMatchingJobs$1
Trigger not set
Feb 16, 2022 7:15:19 AM WARNING io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe lambda$triggerMatchingJobs$1
Trigger not set

rotorsolutions avatar Feb 16 '22 07:02 rotorsolutions

PS2: The repository which is used has a Jenkinsfile. However this job is not configured to use this Jenkinsfile. Could that be related?

rotorsolutions avatar Feb 17 '22 06:02 rotorsolutions

I have been working all day to figure this out...

I have created a temporary Jenkins instance in a Docker setup. I started with copying the job over for which I wanted to setup the plugin. That worked correctly. The hook triggered a build. So I can confirm this is an 'environment related issue' caused by another job or a setting or something like that.

After that I tried to copy all the other jobs over one by one (just the jobs, no credentials) to see at what time it would 'break'... But as you might expect, it didn't break.. Builds kept being triggered..

So I tried to do a similar approach with our plugins, but again this did not break..

rotorsolutions avatar Feb 18 '22 15:02 rotorsolutions

I also encounter same issue.

In my case, If there is "External Job", io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRJobProbe.triggerScm is failed due to java.lang.NullPointerException. So I removed all Jobs that kind of "External Job" as a workaround solution.

I guess this line should be return Optional.ofNullable(trigger).

I find suspicious Jobs with running following code on JENKINS_URL/script

import io.jenkins.plugins.bitbucketpushandpullrequest.BitBucketPPRTrigger


Jenkins.get().getAllItems(Job.class).stream().each{ job ->
  def trigger = null

  if (job instanceof ParameterizedJobMixIn.ParameterizedJob) {
    ParameterizedJobMixIn.ParameterizedJob<?, ?> pJob = (ParameterizedJobMixIn.ParameterizedJob<?, ?>) job;
    trigger = pJob.getTriggers().values().stream().filter{ it instanceof BitBucketPPRTrigger }.findFirst().map{ it as BitBucketPPRTrigger }
  }
  
  if (trigger == null) {
    println "${job.fullName}"
  }
}

TakiTake avatar Mar 25 '22 03:03 TakiTake

Im also having this error and I've tried so many different things. Jenkins Version: 2.332.3 Plugin Version: 2.8.2-beta-1

I hoped the beta version would fix this but it didn't. It did fix the invalid crumb error I had though.

I'm running a MultiBranchPipeline and honestly this error message doesn't make much sense.

I thought the problem was that I was using a username&password to interact with Bitbucket rather than using an app password but I switched and I still get the same error.

Here's the branch source configuration. Screen Shot 2022-06-21 at 4 57 22 PM

jsj1027 avatar Jun 21 '22 20:06 jsj1027

@TakiTake What exactly did you mean by "External Job"?

jsj1027 avatar Jun 21 '22 21:06 jsj1027

@TakiTake I figured out what you meant! I ran the script and found an External Job that was empty and just sitting there. I've got to see if deleting it fixes this but I think this is a good direction! If this works I'll make a PR to fix this in the plugin itself.

jsj1027 avatar Jun 21 '22 21:06 jsj1027

@TakiTake So deleting that "External Job" did fix the issue, and now I don't get the NullPointerException! Thank you!

jsj1027 avatar Jun 24 '22 13:06 jsj1027

this solved my issue as well. Thank you!

HeidiRechek avatar Oct 05 '22 15:10 HeidiRechek

Since this involves the interaction with another plugin and there is a workaround it will be closed

julioc-p avatar Sep 20 '24 09:09 julioc-p