Configuring a Bitbucket Webhook for Release Event Reporting
Last updated: November 4, 2026
Overview
Bitbucket Pipelines can notify Noibu every time you deploy by sending one HTTP POST to Noibu's release webhook at the end of your deployment step. Noibu has dedicated guides for GitHub Actions, GitLab and Jenkins; Bitbucket uses the same generic release webhook, called from bitbucket-pipelines.yml.
Bitbucket's built-in webhooks send Bitbucket's own event payloads, not the six-field body Noibu expects. Calling the webhook from a pipeline step lets you control every field.
Once the webhook is live, each deployment appears in the Release report and Calendar in Noibu, marked as a success or a failure. Noibu uses these releases to link deployments to new issues and to compare performance before and after a release.
Setup takes about 10 minutes and has three steps: add your Noibu domain ID as a Bitbucket variable, add the notification to your deployment step, then run a deployment and confirm the release shows up.
Prerequisites
You need three things before you start.
Your Noibu domain ID. Log in to the Noibu console, confirm the correct company and domain are selected, and open the Dashboard. The domain ID is the segment of the browser URL between
noibu.comanddashboard. Copy it without the slashes. See Retrieving a Domain ID.Bitbucket access. Bitbucket Pipelines must be enabled on the repository, and you need admin access to add repository variables and permission to edit
bitbucket-pipelines.yml.The step that counts as a release. Decide which pipeline and which step is the final step of your deployment (for example, the step marked
deployment: production). The notification goes in that step only, so builds, tests and staging deploys aren't reported as releases.
The pipeline's build image also needs curl and outbound HTTPS access to webhook.noibu.com. Bitbucket's default image, atlassian/default-image, lists curl in version 5, so pin your pipeline to image: atlassian/default-image:5; the unpinned default may resolve to an older version. Custom images may not include curl.
Step 1: Add your domain ID as a Bitbucket variable
Storing the domain ID as a variable keeps it out of your pipeline file and makes it easy to change later.
In Bitbucket, open the repository and select Repository settings.
Under Pipelines, select Repository variables.
Add a variable named
NOIBU_DOMAIN_IDand paste your domain ID as the value.Select Add.
Secured is optional. Secured values are masked in build logs and can't be edited afterward, only replaced or deleted.
If staging and production report to different Noibu domains, add NOIBU_DOMAIN_ID as a deployment variable instead (Repository settings > Pipelines > Deployments, then pick the environment) and give each environment its own domain ID. A deployment variable overrides a repository variable with the same name for steps that use that deployment: environment.
Step 2: Add the release notification to your pipeline
Add an after-script to your final deployment step in bitbucket-pipelines.yml. Bitbucket runs after-script whether the step passes or fails, and sets BITBUCKET_EXIT_CODE there, so one block can report both a successful and a failed deployment.
pipelines:
branches:
main:
- step:
name: Deploy to production
deployment: production
script:
- ./deploy.sh # your existing deployment commands
after-script:
- |
if [ "$BITBUCKET_EXIT_CODE" -eq 0 ]; then
NOIBU_STATUS="success"
else
NOIBU_STATUS="failed"
fi
curl --silent --show-error --fail -X POST \
"https://webhook.noibu.com/release_webhook/${NOIBU_DOMAIN_ID}" \
-H "Content-Type: application/json" \
-d "{
\"component\": \"frontend\",
\"title\": \"Deploy ${BITBUCKET_REPO_SLUG} build #${BITBUCKET_BUILD_NUMBER}\",
\"description\": \"Deployed from ${BITBUCKET_BRANCH}\",
\"status\": \"${NOIBU_STATUS}\",
\"version\": \"${BITBUCKET_COMMIT}\",
\"release_time\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"
}"
Replace ./deploy.sh with your real deployment commands, and change component to the part of your site this pipeline releases. The webhook accepts six fields, all strings:
Field | Value in the example | Notes |
|---|---|---|
|
| The part of the site released, such as frontend, backend, checkout or marketing. Free text. |
| Repo name and build number | A short summary of the release. |
| Branch name | Release details. Can be null. |
|
| Set from |
| Commit hash | A version number, commit hash or ticket ID. Free text. |
| Current UTC time | When the release went live, in RFC 3339 format, for example |
The request needs no authentication header. The domain ID in the URL identifies your domain.
BITBUCKET_BRANCH is only set for branch builds, so description reads "Deployed from " on tag builds; adjust it if you deploy from tags. If a command in after-script fails, Bitbucket skips the rest of that after-script and leaves the step's pass or fail status unchanged, so a failed notification never fails your deployment.
Step 3: Run a deployment and verify the release
Commit the updated
bitbucket-pipelines.ymlto the branch that triggers your deployment, or start the pipeline manually from Pipelines > Run pipeline.Open the pipeline run in Bitbucket and expand the deployment step. The
curlcall appears under the After script section of the log. A successful call prints no errors.In the Noibu console, select the same domain you used to find the domain ID and open the Release report. The new release should appear with your title, component, version and status. It also shows on the Release Calendar.
If you sent a test release, you can edit or delete it from the Release report page.
Troubleshooting
Noibu's generic webhook doesn't document response codes, so the curl output in the After script log is the best place to start.
Symptom | Likely cause | Fix |
|---|---|---|
| The build image doesn't include | Pin the build image to atlassian/default-image:5, which lists it, or install it at the start of the |
The request URL ends in |
| Check the variable name and scope under Repository settings. |
The request returns an error | The JSON is malformed, or a field has an invalid value. | Confirm |
Every release shows as | The notification is in | Move the block into |
The call succeeds but no release appears | The wrong domain ID, or the wrong domain selected in the console. | Re-copy the ID from the Dashboard URL of the domain you're viewing. |
Releases appear for builds and test steps | The notification is in more than one step. | Keep it only in the final deployment step. |