Yeah I’m with you there. I think there is a ticket in the backlog about this, it’s one of those things that’s way more complex for them to implement that it first appears. Ultimately though I think the pipeline should ideally be determined by dependencies rather than named stages. However for most cases these are things I wouldn’t normally suggest someone worries about, instead get more resources and stop worrying too much about optimising the CI.
If on the other hand you already have it working in something like Jenkins - stick to Jenkins! Where GitLab wins for me is it’s much easier to configure and maintain, and it’s ability to launch VMs from the runner making it more like cloud services for those who must do things locally. This can save time in all sorts of other ways IME. Like anything though it has it’s pros and cons.
If for example you can afford a dedicated DevOps engineer then I would probably suggest Jenkins for it’s sheer configurability (or maybe what ever service they are more familiar with). If you want to get up and running with a small team and especially if you have to do the builds locally, using GitLab makes a lot more sense IMO. For those who can build in the cloud however Azure DevOps (or more specifically Azure pipelines) is worth a look in as it supports Linux, macOS, and Windows (https://azure.microsoft.com/en-gb/services/devops/pipelines/). You can even do local builds as well as those in the cloud the only thing I don’t think it can do yet is launch VMs locally, which in my opinion would be a massive win as then the local builds can become as reliable as the cloud builds.
I can image that can be pro in some cases