I'm using gitlab-ci. I have a pipeline that has the following steps :

  1. code-verification

  2. some tests

  3. deploy (manual)

  4. some more tests

  5. rollback (manual)

Both the deploy and the rollback job have to be launch manually which means that I'm using when: manual in my gitlab-ci.yml file.

However, I also want the rollback to be possible even if a step/job has fail before (for example, a faulty deploy or a failing in the "some more tests" stage).

I was thinking of using when: always but since I'm already using the when: manual, it doesn't work (I tried).

For now, I just put the "some more tests" and the "rollback" in the same stage so that the failure of one doesn't impact the other. But is there another way to do this?

I really wish to have everything in the same pipeline (so no trigger) and to always have the possibility to launch the rollback job. No matter what happened before.

1 Answer 1


You can use when: on_failure, in your case you can create a new job for rollback when your some more tests have failed.


  stage: cleanup_build
    - cleanup build when failed
  when: on_failure

For more example: https://docs.gitlab.com/ee/ci/yaml/#when

  • That wouldn't work. Because then, it would always launch a rollback if one of my test fail and I don't want that. I want to manually take the decision to rollback or not. Commented May 6, 2021 at 7:21
  • 3
    You should add allow_failure: true to your other tests and stay on when: manual if you want to keep control of the rollback.
    – Tartan
    Commented May 6, 2021 at 7:56
  • I think that would work indeed. Thanks for the help! Commented May 6, 2021 at 9:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.