Run only one pipeline at time
Asked by petr-hudik:

Hello,

I use bitbucket pipelines for E2E testing on my remote server. Pipleline deploys code to test serverer and runs all tests. It works just fine. But when multiple pipeliens starts, collision happends. I have only one test server and I cant create new one for each pipeline, so second pipeline replace code on server and first pipeline usually fails.

Is there any way to wait until previous pipeline is finished? Or any other workaround? thanks!


Answers:
author: petr-hudik
body: [@Patrik S](/t5/user/viewprofilepage/user-id/4603309) Thanks for reply. No, that is not it. I have something like this:

```
- step:
    name: Deploy to test
    deployment: test
    script:
      - echo "Deploying to test environment"
      - pipe: atlassian/ssh-run:0.2.2
        variables:
          SSH_USER: 'admin'
          SERVER: 'example.com'
          COMMAND: './deploy --branch=$BITBUCKET_BRANCH'
- step:
    name: Cypress - E2E testing
    image: cypress/included:9.5.1
    script:
      - npx cypress run
```

When multiple piplenes are running, second pipeline rewrite deployment on first and E2E tests fails on first pipeline.

comments: author: Patrik S
body: Hello [@petr-hudik](/t5/user/viewprofilepage/user-id/37808) ,

In this case, as we currently do not support multi-step deployments, my suggestion of a workaround would be to have the deploy and E2E testing in the same step, like below :

```
- step:
    name: Deploy to test and Cypress - E2E testing
    image: cypress/included:9.5.1
    deployment: test
    script:
      - echo "Deploying to test environment"
      - pipe: atlassian/ssh-run:0.2.2
        variables:
          SSH_USER: 'admin'
          SERVER: 'example.com'
          COMMAND: './deploy --branch=$BITBUCKET_BRANCH'
      - npx cypress run
```

As the step above is set up as a deployment (because it is using the deployment keyword), if multiple pipelines are triggered and deploy to the same environment, only the first one will be executed, and the other pipelines will be paused. Once one of the concurrent pipelines is complete, you can manually resume the paused ones.

Hope that helps! Let me know if you have any questions.

Thank you, [@petr-hudik](/t5/user/viewprofilepage/user-id/37808)

Kind regards,

Patrik S


author: petr-hudik
body: That is so cool! it works! thanks, that is exactly what i wanted!


author: Patrik S
body: Hello Petr,

Reviewing your case my understanding is that you do not want more than one instance of your pipeline running concurrently because you have just one deployment environment.

In order to avoid that concurrency I would recommend you tracking your deployments by using the [Bitbucket Deployments](https://confluence.atlassian.com/bitbucket/bitbucket-deployments-940695276.html). This way whenever a pipeline step starts a new deployment to a given environment, Bitbucket will first check if there's any other deployment already running to that same environment.

If there's already a deployment in progress, the later pipeline deployment to the same environment will be paused. Once one of the concurrent pipelines complete, you can manually resume the paused one.

So in your case, I'd suggest setting up a deployment environment in your yml to the steps that are sensitive to concurrency by adding the *deployment*option :

```
`- step:    name: Deploy to test    image: atlassian/default-image:3    deployment: test    script:      - python deploy.py test`
```

You can check and change your repository's deployment environments going to :

* Repository settings.

<!-- -->

* In the Pipelines section, choose **Deployments**

There you will be allowed to change environment name, set environment variables and restrict the ability to deployments.

Also, you can refer to this documentation for more details about setting up deployment environments :

* <https://support.atlassian.com/bitbucket-cloud/docs/set-up-and-monitor-deployments/>

And to this one for *Deployment concurrency control* :

* [https://support.atlassian.com/bitbucket-cloud/docs/deployment-concurrency-control](https://support.atlassian.com/bitbucket-cloud/docs/deployment-concurrency-control%20)

Please, let me know if this suggestion works for you :)

Kind regards,

Patrik S


Tags: bitbucket-pipelines

bitbucket-cloud

cloud