User Tools

Site Tools


projects:bitbucket:pullrequestplugin

This is an old revision of the document!


Bitbucket Server Pull Request Hook Plugin

TODOs

  • Internationalization
  • Support for HTTPs
  • Test button in the config

Introduction

The plugin provides the following functionality:

  • Notifying 3rd party services via REST interface about the changes in the project Pull Requests
  • Notification on:
    • PR creation/edit
    • PR decline
    • PR merge
    • New/Edit/Delete comment in the PR
  • Per-repository configuration via 'repository hooks' tab
  • Accessible by the repository administrators
  • The following HTTP operations are supported:
    • POST
    • GET
    • PUT
    • DELETE

Usage

Templating

Several variables can be passed by the message URL or body. There is a special variable containing comma separated list of available variables: ${all_keys}

[IMAGE]

Authorization

There is no dedicated field for authorization. One can add authorization header into 'headers'. In such case the field will look like:

[IMAGE]

Please visit wikipedia to learn how to construct basic auth header.

For Jenkins it is recommended to use Build Token Root Plugin. It allows using anonymous request + build token (think of API key).

Example 1

  1. Create Jenkins job “Bitbucket Capture”
    1. Add String Parameter ALL
    2. Add Token BBBUILD in Build Triggers Trigger builds remotely (e.g., from scripts)
  2. Check if the job is working
    1. Trigger job manually using your browser's private mode

Entering URL will take you to an empty page. Back in Jenkins you should see that the job was triggered and parameter is successfully passed:

  1. Add more String Parameters to the Jenkins job:
    1. ACTION
    2. PR_ID
    3. REPO
    4. PROJECT
  2. Configure Bitbucket Server
    1. Ensure that the plugin is installed.
    2. Enter any repository Settings, then Hooks
    3. Enable Pull Request Hook
    4. Enter URL http://localhost:8080/buildByToken/buildWithParameters?token=BBBUILD&job=Bitbucket%20Capture&ALL=${all_keys}&ACTION=${action}&PR_ID=${pr_id}&REPO=${repo}&PROJECT=${project}
    5. Enable all triggers
    6. Save
  3. Test connection
    1. Create pull request
    2. Add a comment

After that you should notice that a new builds were run. Inspect those builds parameters.

Extras

Jenkins job config.xml:

<project>
  <actions/>
  <description/>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        <hudson.model.StringParameterDefinition>
          <name>ALL</name>
          <description/>
          <defaultValue/>
        </hudson.model.StringParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
  </properties>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <authToken>BBBUILD</authToken>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders/>
  <publishers/>
  <buildWrappers/>
</project>

Example 2

We want to capture the following behaviours:

  • Creation of the new Pull Request
  • Changes to the Pull Request
  • New comment

Captured event will be propagated to Jenkins instance.

There is only a single URL per repository therefore we will need a relay job to extract necessary variables and call appropriate jobs.

1. Configure Jenkins

  • Add Token BBBUILD
  • Add Parameters

2. Configure Bitbucket

  • Set URL localhost

Notes

  • Connection timeout is set to 5 seconds
projects/bitbucket/pullrequestplugin.1460934766.txt.gz · Last modified: 2016/04/18 01:12 by mkucia