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

Request to JIRA webhook breaking pipeline

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Not A Defect
    • jira-trigger-plugin
    • None

    Description

      This plugin was working fine until today. One of our workflow statuses hits the JIRA trigger webhook and is causing an error as revealed by Jenkins logs, which does not trigger the build.

      This is the workflow we have in JIRA:

      At either "QA on dev" and "QA on stage", we trigger a build in our pipeline. Since we set this up a year ago, both statuses would trigger the build but today, only "QA on dev" triggers the build successfully. When we reach "QA on stage", the Jenkins log returns us an error:

      Error while serving http://redacted-url/jira-trigger-webhook-receiver/
      org.codehaus.jettison.json.JSONException: JSONObject["description"] not found.
      at org.codehaus.jettison.json.JSONObject.get(JSONObject.java:360)
      at org.codehaus.jettison.json.JSONObject.getString(JSONObject.java:487)
      at com.atlassian.jira.rest.client.internal.json.StatusJsonParser.parse(StatusJsonParser.java:31)
      at com.atlassian.jira.rest.client.internal.json.IssueJsonParser.parse(IssueJsonParser.java:244)
      at com.atlassian.jira.rest.client.internal.json.IssueJsonParser$parse.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.WebhookCommentEventJsonParser.parse(WebhookCommentEventJsonParser.groovy:23)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.WebhookCommentEventJsonParser$parse.call(Unknown Source)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.JiraWebhook.processEvent(JiraWebhook.groovy:70)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.JiraWebhook$processEvent.callCurrent(Unknown Source)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.JiraWebhook.doIndex(JiraWebhook.groovy:50)
      at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
      at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
      Caused: java.lang.reflect.InvocationTargetException
      at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:347)
      at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:52)
      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.IndexDispatcher.dispatch(IndexDispatcher.java:26)
      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.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.ssegateway.Endpoint$SSEListenChannelFilter.doFilter(Endpoint.java:225)
      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 io.jenkins.blueocean.auth.jwt.impl.JwtAuthenticationFilter.doFilter(JwtAuthenticationFilter.java:61)
      at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:132)
      at javax.servlet.FilterChain$doFilter.call(Unknown Source)
      at com.ceilfors.jenkins.plugins.jiratrigger.ExceptionLoggingFilter.doFilter(ExceptionLoggingFilter.groovy:29)
      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 hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:138)
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
      at javax.servlet.FilterChain$doFilter$0.call(Unknown Source)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
      at com.ceilfors.jenkins.plugins.jiratrigger.webhook.JiraWebhookCrumbExclusion.process(JiraWebhookCrumbExclusion.groovy:22)
      at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:59)
      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:135)
      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:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at java.lang.Thread.run(Thread.java:748)
      

      Is it possible that Atlassian changed their API all of a sudden? This is causing our workflow to break and we can't move our tickets forward.

      Attachments

        Issue Links

          Activity

            ceilfors Wisen Tanasa added a comment -

            Can you enable the finest log as per the troubleshooting section documented in the README (the doc state fine, you need finest)? This will log the entire webhook event body that you are receiving. There might be JIRA configuration problem too.

            ceilfors Wisen Tanasa added a comment - Can you enable the  finest  log as per the troubleshooting section documented in the README (the doc state  fine , you need  finest )? This will log the entire webhook event body that you are receiving. There might be JIRA configuration problem too.
            patrickng Patrick Ng added a comment -

             

            Here is the response from the FINEST setting. I've had to paste it in a gist because it's too long.

            https://gist.github.com/patrickng/566944faf0c1ff38e56152c4b2bb073f

            patrickng Patrick Ng added a comment -   Here is the response from the FINEST setting. I've had to paste it in a gist because it's too long. https://gist.github.com/patrickng/566944faf0c1ff38e56152c4b2bb073f
            patrickng Patrick Ng added a comment -

            I want to also add that we use a phrase "jenkins go home" in the comments to trigger a build as well. Yesterday it was still working fine for the "QA on dev" status, that is if the ticket is in "QA on dev" status, commenting with "jenkins go home" would trigger a build. Today, that is no longer the case - commenting is also not triggering a build. I went to take a look at the log for a possible error but there are no logs generated.

            patrickng Patrick Ng added a comment - I want to also add that we use a phrase "jenkins go home" in the comments to trigger a build as well. Yesterday it was still working fine for the "QA on dev" status, that is if the ticket is in "QA on dev" status, commenting with "jenkins go home" would trigger a build. Today, that is no longer the case - commenting is also not triggering a build. I went to take a look at the log for a possible error but there are no logs generated.
            ceilfors Wisen Tanasa added a comment -

            I checked the webhook event and found this JSON body and it seems like this status doesn't have a description field. I'd suggest you to check if there is anything in JIRA you can configure to add the description field to this status field.

                        "status": {
                            "self": "https://sportsrecruits.atlassian.net/rest/api/2/status/10500",
                            "iconUrl": "https://sportsrecruits.atlassian.net/images/icons/statuses/generic.png",
                            "name": "QA on stage",
                            "id": "10500",
                            "statusCategory": {
                                "self": "https://sportsrecruits.atlassian.net/rest/api/2/statuscategory/4",
                                "id": 4,
                                "key": "indeterminate",
                                "colorName": "yellow",
                                "name": "In Progress"
                            }
                        },
            
            ceilfors Wisen Tanasa added a comment - I checked the webhook event and found this JSON body and it seems like this status doesn't have a description field. I'd suggest you to check if there is anything in JIRA you can configure to add the description field to this status field. "status" : { "self" : "https: //sportsrecruits.atlassian.net/rest/api/2/status/10500" , "iconUrl" : "https: //sportsrecruits.atlassian.net/images/icons/statuses/generic.png" , "name" : "QA on stage" , "id" : "10500" , "statusCategory" : { "self" : "https: //sportsrecruits.atlassian.net/rest/api/2/statuscategory/4" , "id" : 4, "key" : "indeterminate" , "colorName" : "yellow" , "name" : "In Progress" } },
            patrickng Patrick Ng added a comment - - edited

            Seems like there could have been a change to the payload by Atlassian. We never had the description field filled out. After filling out the Description field, Status change now updates.

            Regarding the comment based trigger, there are new checkboxes for Comment Created/Updated/Deleted. I checked the box for Comment Created and receive this in the logs:

            https://gist.github.com/patrickng/428ab1ed68fe909261c2b3bf853da7c4

            Without it being checked, there is no payload sent to the webhook from a comment.

             

            Edit: I've updated the status of the ticket to "Major" since we at least have this working and not blocking our workflow.

            patrickng Patrick Ng added a comment - - edited Seems like there could have been a change to the payload by Atlassian. We never had the description field filled out. After filling out the Description field, Status change now updates. Regarding the comment based trigger, there are new checkboxes for Comment Created/Updated/Deleted. I checked the box for Comment Created and receive this in the logs: https://gist.github.com/patrickng/428ab1ed68fe909261c2b3bf853da7c4 Without it being checked, there is no payload sent to the webhook from a comment.   Edit: I've updated the status of the ticket to "Major" since we at least have this working and not blocking our workflow.
            ceilfors Wisen Tanasa added a comment -

            That's good. I'll close the ticket as it's not this plugin's bug. I wasn't clear on the comment based trigger checkbox. Can you advise on what we should change in the README?

            ceilfors Wisen Tanasa added a comment - That's good. I'll close the ticket as it's not this plugin's bug. I wasn't clear on the comment based trigger checkbox. Can you advise on what we should change in the README?
            patrickng Patrick Ng added a comment -

            Allow me to clarify about the comment based trigger:

            Commenting on a JIRA ticket with a specific phrase does not seem to be sending a POST request to the jira-trigger-plugin webhook in Jenkins anymore. According to the plugin README, it says to only set event to issue_updated but creating a comment does not seem to trigger an issue_updated event POST to the webhook. This seems to be the reason why I can no longer trigger a job from a matching comment.

            patrickng Patrick Ng added a comment - Allow me to clarify about the comment based trigger: Commenting on a JIRA ticket with a specific phrase does not seem to be sending a POST request to the jira-trigger-plugin webhook in Jenkins anymore. According to the plugin README, it says to only set event to issue_updated but creating a comment does not seem to trigger an issue_updated event POST to the webhook. This seems to be the reason why I can no longer trigger a job from a matching comment.
            ceilfors Wisen Tanasa added a comment -

            Thanks for the clarification. You said that you are receiving the event now in Jenkins when "comment created/updated/deleted" are checked, but can you advise if the jobs are triggered as expected?

            ceilfors Wisen Tanasa added a comment - Thanks for the clarification. You said that you are receiving the event now in Jenkins when "comment created/updated/deleted" are checked, but can you advise if the jobs are triggered as expected?
            patrickng Patrick Ng added a comment -

            The job is not being triggered.

            At the bottom of the gist I posted most recently (https://gist.github.com/patrickng/428ab1ed68fe909261c2b3bf853da7c4) it says that comment_created is an invalid event type.

            I've attached the screen shot of the Comment options being checked in the webhook screen of Atlassian.

             

             

            I am not sure if this change was intentional or not from Atlassian, this change being comments in a JIRA ticket are not emitting the jira:issue_changed event. In the jira-trigger-plugin CHANGELOG, I see that in version 0.2.0, this comment_created event was no longer supported and to just use issue_updated. This presents a problem if the change by Atlassian was intentional, since comment_created is sending a POST request to the webhook but the act of commenting on the ticket does not trigger issue_changed event.

            patrickng Patrick Ng added a comment - The job is not being triggered. At the bottom of the gist I posted most recently ( https://gist.github.com/patrickng/428ab1ed68fe909261c2b3bf853da7c4)  it says that comment_created is an invalid event type. I've attached the screen shot of the Comment options being checked in the webhook screen of Atlassian.     I am not sure if this change was intentional or not from Atlassian, this change being comments in a JIRA ticket are not emitting the jira:issue_changed event. In the jira-trigger-plugin CHANGELOG, I see that in version 0.2.0, this comment_created event was no longer supported and to just use issue_updated. This presents a problem if the change by Atlassian was intentional, since comment_created is sending a POST request to the webhook but the act of commenting on the ticket does not trigger issue_changed event.
            patrickng Patrick Ng added a comment - - edited

            Found the issue. Atlassian intentionally deprecated the comment object in issue:* events. They are pushing for using the comment:* events

            https://developer.atlassian.com/cloud/jira/platform/change-notice-removal-of-comments-from-issue-webhooks/

            patrickng Patrick Ng added a comment - - edited Found the issue. Atlassian intentionally deprecated the comment object in issue:* events. They are pushing for using the comment:* events https://developer.atlassian.com/cloud/jira/platform/change-notice-removal-of-comments-from-issue-webhooks/
            ceilfors Wisen Tanasa added a comment -

            patrickng Thank you so much for reporting this issue. I have raised another JIRA ticket which can be found here: JENKINS-49178. Unfortunately I can't fix it immediately. I also do not have access to JIRA Cloud (which I presume the JIRA version you use). I have just requested for a free license from Atlassian which will also take some time.

            ceilfors Wisen Tanasa added a comment - patrickng  Thank you so much for reporting this issue. I have raised another JIRA ticket which can be found here:  JENKINS-49178 . Unfortunately I can't fix it immediately. I also do not have access to JIRA Cloud (which I presume the JIRA version you use). I have just requested for a free license from Atlassian which will also take some time.

            ceilfors I faced the same issue using Cloud version, but on-prem v7.2.12 works fine

            kagarlickij Dmitriy Kagarlickij added a comment - ceilfors I faced the same issue using Cloud version, but on-prem v7.2.12 works fine
            ceilfors Wisen Tanasa added a comment -

            kagarlickij Please watch JENKINS-49178.

            ceilfors Wisen Tanasa added a comment - kagarlickij Please watch JENKINS-49178 .

            People

              ceilfors Wisen Tanasa
              patrickng Patrick Ng
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: