jenkinsci / bitbucket-push-and-pull-request-plugin

Plugin for Jenkins v2.138.2 or later, that triggers job builds on Bitbucket's push and pull request events.
https://plugins.jenkins.io/bitbucket-push-and-pull-request
MIT License
46 stars 50 forks source link

NullPointerException occurs when webhook triggered #310

Closed gurcankavakci closed 7 months ago

gurcankavakci commented 8 months ago

Hi everyone, I am unable to trigger build when PR is created. I select all options (push, open etc) in webhook settings. When webhook is triggered by bitbucket server, NullPointerException occurs in jenkins system logs. BitBucketPPRPullRequestServerAction.java:50 search for links (List<BitBucketPPRServerClone> clones = payload.getServerPullRequest().getToRef().getRepository().getLinks().getCloneProperty();) but payload does not have link data as below sample payload json.

Jenkins system log:

Eki 30, 2023 10:54:03 ÖÖ INFO io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRHookReceiver doIndex
Received POST request over Bitbucket hook
Eki 30, 2023 10:54:03 ÖÖ INFO io.jenkins.plugins.bitbucketpushandpullrequest.processor.BitBucketPPRPayloadProcessorFactory createProcessor
Create BitBucketPPRPullRequestServerPayloadProcessor
Eki 30, 2023 10:54:03 ÖÖ WARNING org.eclipse.jetty.server.handler.ContextHandler$Context log
Error while serving http://jenkins-url/bitbucket-ppr-webhook/
java.lang.NullPointerException
    at io.jenkins.plugins.bitbucketpushandpullrequest.action.BitBucketPPRPullRequestServerAction.<init>(BitBucketPPRPullRequestServerAction.java:50)
    at io.jenkins.plugins.bitbucketpushandpullrequest.processor.BitBucketPPRPullRequestServerPayloadProcessor.buildActionForJobs(BitBucketPPRPullRequestServerPayloadProcessor.java:48)
    at io.jenkins.plugins.bitbucketpushandpullrequest.processor.BitBucketPPRPullRequestServerPayloadProcessor.processPayload(BitBucketPPRPullRequestServerPayloadProcessor.java:54)
    at io.jenkins.plugins.bitbucketpushandpullrequest.receiver.BitBucketPPRHookReceiver.doIndex(BitBucketPPRHookReceiver.java:83)
    at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)
    at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:397)
Caused: java.lang.reflect.InvocationTargetException
    at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:401)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:409)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:207)

I changed webhook url in jenkins and bitbucket server as /bitbucket-ppr-webhook/ I upgrade plugin to 3.0.0

webhook payload:

{
    "eventKey": "pr:opened",
    "date": "2023-10-30T13:35:50+0300",
    "actor": {
        "name": "x",
...
    },
    "pullRequest": {
        "id": 24,
        "version": 0,
        "title": "PR Update test",
        "state": "OPEN",
        "open": true,
        "closed": false,
        "createdDate": 1698662150803,
        "updatedDate": 1698662150803,
        "fromRef": {
            "id": "refs/heads/feature/multibranchtest",
            "displayId": "feature/multibranchtest",
            "latestCommit": "93196d1a43b3e6eca9db22c1bea859da85eaa8b6",
            "repository": {
                "slug": "multibranch-test",
                "id": 10,
                "name": "multibranch-test",
                "scmId": "git",
                "state": "AVAILABLE",
                "statusMessage": "Available",
                "forkable": true,
                "project": {
                    "key": "PRO",
                    "id": 6,
                    "name": "Pro_Test",
                    "public": false,
                    "type": "NORMAL"
                },
                "public": false
            }
        },
        "toRef": {
            "id": "refs/heads/master",
            "displayId": "master",
            "latestCommit": "e45719cfcf91431a0dec03ecad54909df13245bd",
            "repository": {
                "slug": "multibranch-test",
                "id": 10,
                "name": "multibranch-test",
                "scmId": "git",
                "state": "AVAILABLE",
                "statusMessage": "Available",
                "forkable": true,
                "project": {
                    "key": "PRO",
                    "id": 6,
                    "name": "Pro_Test",
                    "public": false,
                    "type": "NORMAL"
                },
                "public": false
            }
        },
        "locked": false,
        "author": {
            "user": {
                "name": "x",
...            },
            "role": "AUTHOR",
            "approved": false,
            "status": "UNAPPROVED"
        },
        "reviewers": [
            {
                "user": {
                    "name": "e",
...                },
                "role": "REVIEWER",
                "approved": false,
                "status": "UNAPPROVED"
            }
        ],
        "participants": []
    }
}

My Jenkinsfile trigger settings:

properties([
  pipelineTriggers([
    [
      $class: 'BitBucketPPRTrigger',
      triggers : [
        [
          $class: 'BitBucketPPRPullRequestServerTriggerFilter',
          actionFilter: [
            $class: 'BitBucketPPRPullRequestServerCreatedActionFilter',
          ]
        ]
      ]
    ]
  ])
])

Also I cant see any link field in pr:open payload sample: https://confluence.atlassian.com/bitbucketserver/event-payload-938025882.html?utm_campaign=in-app-help&utm_medium=in-app-help&utm_source=stash#Eventpayload-pullrequest

cdelmonte-zg commented 8 months ago

Hi @gurcankavakci, are you using a BB Server version >=8.0? As I see the API has changed and the clone property has been removed.

gurcankavakci commented 8 months ago

@cdelmonte-zg My BB server is v5.8.1

cdelmonte-zg commented 8 months ago

@gurcankavakci

That's why it doesn't work, Bitbucket Server is supported from version 5.14+ (see readme), sorry :(

Anyway, I'll open a bug to remove the NullPointerException and give more context in the logs in case an unsupported version of BB Server is used.

gurcankavakci commented 8 months ago

Thank you for your interest.