Missed Team ’24? Catch up on announcements here.

×
Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

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

Lloyd Powell June 3, 2019

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
Philip Hodder
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
June 11, 2019

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

Tony Schirmer February 3, 2020

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?

Tony Schirmer February 3, 2020

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

Like Deleted user likes this
Deleted user June 18, 2022

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

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events