I have a repository with two branches: master and Dev and I want to configure that pipline in such a way that when I push code to Dev branch and code build was successfull, the Dev was merged to master. Unfortunatly I can't find any information about merge in bitbucket piplines docs.
That's my yml file:
pipelines:
branches:
Dev:
- step:
script:
- ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
Could somebody help me with that case? If it possible?
--Edit
I try to change script as sugest:
pipelines:
branches:
Dev:
- step:
script:
- ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME -Dsf.password=$SF_PASSWORD
- git remote -v
- git fetch
- git checkout master
- git merge Dev
- git push -v --tags origin master:master
Result:
git remote -v
+ git remote -v
origin [email protected]:repository/project.git (fetch)
origin [email protected]:repository/project.git (push)
git fetch origin
+ git fetch origin
Warning: Permanently added the RSA host key for IP address ..... to the list of known hosts.
And error:
+ git checkout master
error: pathspec 'master' did not match any file(s) known to git.
--Solution
Dev:
- step:
script:
- ant deployCodeCheckOnly -Dsf.username=$SF_USERNAME Dsf.password=$SF_PASSWORD
- git fetch
- git checkout -b master
- git merge Dev
- git push -v --tags origin master:master
I was facing the same issue, but wanted to use pull requests instead of simple git merge. So I ended up utilising bitbucket API for the job:
Create "App password" so you don't have to push your own credentials to pipelines (bitbucket settings -> app passwords)

I have a bash script that creates pull request from $BITBUCKET_BRANCH and merge it immediately
#!/usr/bin/env bash
# Exit immediately if a any command exits with a non-zero status
# e.g. pull-request merge fails because of conflict
set -e
# Set destination branch
DEST_BRANCH=$1
# Create new pull request and get its ID
echo "Creating PR: $BITBUCKET_BRANCH -> $DEST_BRANCH"
PR_ID=`curl -X POST https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_OWNER/$BITBUCKET_REPO_SLUG/pullrequests \
--fail --show-error --silent \
--user $BB_USER:$BB_PASSWORD \
-H 'content-type: application/json' \
-d '{
"title": "'$BITBUCKET_BRANCH' -> '$DEST_BRANCH'",
"description": "automatic PR from pipelines",
"state": "OPEN",
"destination": {
"branch": {
"name": "'$DEST_BRANCH'"
}
},
"source": {
"branch": {
"name": "'$BITBUCKET_BRANCH'"
}
}
}' \
| sed -E "s/.*\"id\": ([0-9]+).*/\1/g"`
# Merge PR
echo "Merging PR: $PR_ID"
curl -X POST https://api.bitbucket.org/2.0/repositories/$BITBUCKET_REPO_OWNER/$BITBUCKET_REPO_SLUG/pullrequests/$PR_ID/merge \
--fail --show-error --silent \
--user $BB_USER:$BB_PASSWORD \
-H 'content-type: application/json' \
-d '{
"close_source_branch": false,
"merge_strategy": "merge_commit"
}'
./merge.sh DESTINATION_BRANCH
just call the script:
Dev:
- step:
script:
- ./merge.sh master
In the “script” section of the YAML configuration, you can do more or less anything you can do at the shell, so (although I’ve never tried it) don’t see a reason why this shouldn’t be possible.
In other words, you’d have to:
master
BITBUCKET_COMMIT environment variable, which identifies your dev commit)master (and probably also push)As git is available in script, you can use normal git commands and do not need anything specific to Bb Pipelines, like so:
script:
- git fetch
- git checkout -b master
- git merge Dev
- git push -v --tags origin master:master
To make sure this is only done when your Ant job is successful, you should make sure that in case of an error you’ll get a non-zero exit status (which, I assume, is Ant’s default behaviour).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With