TIL: How to Run Parallel Jobs on Gitlab CI (Different Stages)
If you are familiar with Gitlab CI you probably know that jobs in the same stages will run in parallel.
However you can also run jobs in different stages at the same time. Let’s see our .gitlab-ci.yml
looks like this:
stages:
- test
- deploy
format:
stage: test
script:
- task format
lint:
stage: test
script:
- task lint
deploy:preview:
stage: deploy
only:
- merge_request
image: docker
script:
- task deploy
So for my use case when a user creates a merge request, I want to run some tests against the code, such as linting and formatting. But also deploy my app to a preview environment. Whilst these jobs belong to different stages.
The deploy job shouldn’t really depend on the jobs in the test
stage as we still want to deploy our
app regardless so we can test in the preview environment.
We can do that using needs
1 keywords, so our deploy:preview
job will now look like this:
deploy:preview:
stage: deploy
only:
- merge_request
needs: []
image: docker
script:
- task deploy
Now our job will run at the same time as the test
stage jobs.
The needs
keyword is used to run our job out of order.
An empty array ([]), to set the job to start as soon as the pipeline is created. - Gitlab CI Docs