Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,295,848
Community Members
 
Community Events
165
Community Groups

How do I run multiple deployments against one repository in Bitbucket Pipelines?

I have a pipeline file that uses variables for a simple deployment process. Although in my repository I would like to deploy multiple applications.

I basically would like to have multiple deployments. Where they pass in different variables, for example, lets sat I'm doing a simple thing such as a docker build and a kubernetes deployment:

docker build -t ${IMAGE_NAME} -f ${APPLICATION_NAME}/Dockerfile .

docker push ${IMAGE_NAME}

kubectl set image deployment/${CONTAINER_NAME} ${CONTAINER_NAME}=${IMAGE_NAME}

I have multiple Dockerfiles in my repository, they lie under their specific application folders. So when I push to develop, I wish for them all to be deployed. 

It doesn't appear that this is achievable with ease, so I was wondering if there was a way to do this, I imagine I'm not the first person to ask. So can I either loop through specific steps or have a way of calling my pipeline more than once with different variables? I hope I don't have to replicate the process in multiple steps for each application, the scenario I have is a lot more complex than this and that would take up a lot of space, let alone not fit under the step limit count.

What's the best way to achieve this? I've used Octopus with Team City in the past and it has supposed this with relative ease.

Thanks in advance for your help :-)

1 answer

0 votes

Hi Lloyd,

Would it be possible for you to place these commands inside of a bash script file? And then call the script with the values you need?

For example:

deploy.sh:

#!/bin/bash

set +e
set +x

APPLICATION_NAME=$1
CONTAINER_NAME=$2
IMAGE_NAME=$3

docker build -t ${IMAGE_NAME} -f ${APPLICATION_NAME}/Dockerfile .
docker push ${IMAGE_NAME}
kubectl set image deployment/${CONTAINER_NAME} ${CONTAINER_NAME}=${IMAGE_NAME}

bitbucket-pipelines.yml:

pipelines:
default:
- step:
name: Deploy to production
deployment: production
script:
- bash deploy.sh app-name-1 container-name-1 image-name-1
- bash deploy.sh app-name-2 container-name-2 image-name-2
- bash deploy.sh app-name-3 container-name-3 image-name-3

Given that the deployments appear to all be to the same Kubernetes cluster, it makes more sense to have these all in a single step. If you need to deploy to different clusters, then that would be when I recommend you should split this across several steps. 

This might not be an appropriate solution since, as you mentioned, you simplified your use-case. So let me know if this doesn't scale to your use-case, and provide me with some additional details.

Thanks,

Phil

This isn't a great solution if you want to deploy to app-name-1 but not app-name-2? Any way that we're able to get an indication for this ability? 

 

Or would you expect that we split these out into their own pipelines?

An example would be to allow each developer we have to push to their own environment without affecting any other pipeline.

Like jan-soukup likes this

Any movement on this? I'm facing same need.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Bitbucket

Git push size limits are coming to Bitbucket Cloud starting April 4th, 2022

Beginning on April 4th, we will be implementing push limits. This means that your push cannot be completed if it is over 3.5 GB. If you do attempt to complete a push that is over 3.5 GB, it will fail...

2,170 views 2 9
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you