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

Request to JIRA webhook breaking pipeline

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Not A Defect
    • Component/s: jira-trigger-plugin
    • Labels:
      None
    • Environment:
    • Similar Issues:

      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

            patrickng Patrick Ng created issue -
            Hide
            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.

            Show
            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.
            marco_rothe Marco Rothe made changes -
            Field Original Value New Value
            Link This issue is related to JENKINS-47736 [ JENKINS-47736 ]
            marco_rothe Marco Rothe made changes -
            Link This issue is related to JENKINS-47736 [ JENKINS-47736 ]
            Hide
            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

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

            Show
            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.
            Hide
            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"
                            }
                        },
            
            Show
            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" } },
            Hide
            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.

            Show
            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 made changes -
            Priority Blocker [ 1 ] Major [ 3 ]
            Hide
            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?

            Show
            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 made changes -
            Resolution Not A Defect [ 7 ]
            Status Open [ 1 ] Closed [ 6 ]
            patrickng Patrick Ng made changes -
            Attachment Screenshot 2018-01-24 at 1.52.59 AM.png [ 41204 ]
            patrickng Patrick Ng made changes -
            Attachment Screenshot 2018-01-24 at 1.52.59 AM.png [ 41204 ]
            Hide
            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.

            Show
            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.
            Hide
            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?

            Show
            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 made changes -
            Attachment Screenshot 2018-01-24 17.06.38.png [ 41240 ]
            Hide
            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.

            Show
            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.
            Hide
            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/

            Show
            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/
            Hide
            ceilfors Wisen Tanasa added a comment -

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

            Show
            ceilfors Wisen Tanasa added a comment - Patrick Ng  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.
            Hide
            kagarlickij Dmitriy Kagarlickij added a comment -

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

            Show
            kagarlickij Dmitriy Kagarlickij added a comment - Wisen Tanasa I faced the same issue using Cloud version, but on-prem v7.2.12 works fine
            Hide
            ceilfors Wisen Tanasa added a comment -
            Show
            ceilfors Wisen Tanasa added a comment - Dmitriy Kagarlickij Please watch JENKINS-49178 .
            ceilfors Wisen Tanasa made changes -
            Link This issue is duplicated by JENKINS-49178 [ JENKINS-49178 ]

              People

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

                Dates

                Created:
                Updated:
                Resolved: