By default, stages are ordered as: build, test, and deploy - so all stages execute in a logical order that matches a development workflow. Removing stages was never the goal. In gitlab-ci.yml you can see, that step 1 and 3 is realized by gitlab runner. GitLab out-of-the-box has defined the following three stages: Here, when jobs from build stage complete with success, GitLab proceeds to the test stage, starting all jobs from that stage in parallel. Let's look into how these two approaches differ, and understand how to best leverage them. By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. If a job needs another in the same stage, dependencies should be respected and it should wait (within the stage) to run until the job it needs is done. It is possible to break the stages execute sequentially rule by using the needs keyword to build a Directed Acyclic Graph: Here the iOS deployment is allowed to proceed as soon as the build_ios job has finished, even if the remainder of the build stage has not completed. This limitation was a pain point for our users because they wanted to configure the pipeline based on the needs dependencies only and drop the use of stages completely. Jobs with needs defined remain in a skipped stage even after the job they depend upon passes. Not the answer you're looking for? Whats the Difference Between a DOS and DDoS Attack? verify the components work together, then deploy the whole app. The docs for the needs keyword are here. KRS: 0000894599 A particular Runner installation wont execute more than