setting up pipeline when to use default vs branches?
Asked by Deepesh Belani:

Hi All, I am new to BB pipeline. I wanted to create a pipeline for running lint for python followed by deploying to GCP CF. Have few questions on designing the pipeline as below.

BB branches: dev, test, release. Default branch is dev.

1\] I want to understand when to use pipeline with default vs branches?

2\] I want to run lint only when code is checked in dev branch. I want to run PyTest only when code is merged in test How do I design this in pipeline?

Here is a pipeline code I have created so far. Request your feedback. TIA!

image: python:3.11

pipelines:  
# default:  
# - step:  
# caches:  
# - pip  
# name: "Check flake8"  
# script: # Modify the commands below to build your repository.  
# - pip install flake8  
# - flake8 --max-line-length=180 --ignore=E203,W503

<br />

branches:  
dev:  
- step:  
name: "Deploy to dev GCP project"  
image: google/cloud-sdk:latest  
# deployment: test  
script:  
- pip install flake8  
- flake8 --max-line-length=180 --ignore=E203,W503  
- echo $DEV_API_KEYFILE \> \~/.gcloud-api-key.json  
- gcloud auth activate-service-account --key-file \~/.gcloud-api-key.json  
- gcloud functions deploy dev_bitbucket_linting --entry-point auth --runtime=python311 --timeout=240 --min-instances=1 --max-instances=10 --trigger-http --service-account=$DEV_SERVICE_ACCOUNT --region $DEV_GCP_REGION --project $DEV_GCP_PROJECT

test:  
- step:  
name: "Deploy to test GCP project"  
script:  
- pip install pytest  
- pytest --junitxml=test-reports/report.xml  
- echo $TEST_API_KEYFILE \> \~/.gcloud-api-key.json  
- gcloud auth activate-service-account --key-file \~/.gcloud-api-key.json  
- gcloud functions deploy dev_bitbucket_linting --entry-point auth --runtime=python311 --timeout=240 --min-instances=1 --max-instances=10 --trigger-http --service-account=$TEST_SERVICE_ACCOUNT --region $TEST_GCP_REGION --project $TEST_GCP_PROJECT


Answers:
author: Theodora Boudale
body: Hi Deepesh,
> 1\] I want to understand when to use pipeline with default vs branches?

The default pipeline runs on every push (excluding tag pushes) to the repository unless a branch-specific pipeline is defined. This can be used in the following cases:

* You want the exact same pipeline to run when pushing to any branch of the repo.  

* You have branches pipelines for some branches, e.g. dev and test in your case, but you want a different pipeline to run for all the other branches.

This is our documentation for reference:

* <https://support.atlassian.com/bitbucket-cloud/docs/pipeline-start-conditions/>  

> 2\] I want to run lint only when code is checked in dev branch. I want to run PyTest only when code is merged in test How do I design this in pipeline?

Since you want pipelines to run only for dev and test branches, you don't need to use the default pipeline.

The pipelines you have for dev and test branch will run every time there are new commits on dev or test respectively. Please keep in mind that the pipeline doesn't differentiate between a push of commits or a merge to a branch, so it will run in both cases.

You can adjust the commands of each pipeline's script depending on what you want to run for each branch.

You can also specify a different Docker image as a build container for each step with the keyword image, like you are doing for the step in dev pipeline.

Please feel free to reach out if you have any questions!

Kind regards,  
Theodora

comments: author: Deepesh Belani
body: Thank you Theo for your answers this helps!


author: Theodora Boudale
body: That's good to hear Deepesh and you are very welcome! Please feel free to reach out if you ever need anything else!


Tags: bitbucket-pipelines

cloud