I like Gitlab fine by ignoring pretty much everything it does other than host the source code and let me view READMEs in the browser (and for work, also merge requests). In general the more I have to use anything other than those, the more frustrated I get, which was also how I felt about Github in the past. I'm not sure I've ever had a non-frustrating experience when trying to set up a CI pipeline on any platform, so I guess Gitlab's CI isn't any better or worse than others in that regard. There are an awful lot of tabs on the left any time I look for something through those menus though, most of which I don't know what they do and I would probably not be happy to have to learn.
> I'm not sure I've ever had a non-frustrating experience when trying to set up a CI pipeline on any platform, so I guess Gitlab's CI isn't any better or worse than others in that regard.
Honestly, Gitlab's CI is one of its killer features.
I guess some of the artifact repository stuff is nice, but like; their terraform repository is probably the worst of all choices, all the downsides of the HTTP state backend and no upside..
It's so hit and miss; but! the CI is actually good..
I don't hate using Gitlab CI once it's set up; I just hate "put shell scripts in YAML to define how this should work". The least annoying experiences I've had with them are when every entry is literally just a single line that invokes an external script; shell scripting is already annoying enough without having to also spend the time to understand a YAML schema for what order they get invoked in and what environmental variables are in scope (not to mention what the implicit inputs are; a few months ago I tried to add a task to run some check on the commit message for an MR, and I found that even on repositories where the merge commit option is disabled in favor of squashing or fast-forwarding, the top commit message is still a merge commit).
Somehow most teams I've worked on ended up with the worst of both worlds: lots of stuff in the CI yaml file and then still shelling out to a bash script at the end to run the tests. Neither the config or the script is enough to understand what's going on, and woe to anyone who tries to invoke the scripts locally with the assumption that the scripts don't implicitly depend on the extra scaffolding in the YAML.