Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bitbucket pipeline - possibility to merge one branch to another

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
like image 323
Adamo Avatar asked May 13 '17 14:05

Adamo


2 Answers

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:

1. Create "App password"

Create "App password" so you don't have to push your own credentials to pipelines (bitbucket settings -> app passwords)

bitbucket app password

2. Set environment variables for pipelines

  • BB_USER = your username
  • BB_PASSWORD = app password

3. Create bash script

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"
  }'
  • usage: ./merge.sh DESTINATION_BRANCH
  • see pipelines environment variables documentation to understand better used variables
  • see bitbucket API docs for more info about used API

4. Finally in pipelines

just call the script:

Dev:
       - step:
           script:
            - ./merge.sh master

Benefits:

  • Pipeline will fail if there is conflict (if you want it to fail)
  • better control of what's happening
like image 106
svestka Avatar answered Nov 20 '22 22:11

svestka


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:

  • Switch the branch to master
  • Merge dev (optionally, using the predefined BITBUCKET_COMMIT environment variable, which identifies your dev commit)
  • Commit to 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).

like image 31
BlueM Avatar answered Nov 20 '22 23:11

BlueM