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