I spent many years working with Jenkins and switch to GitLab CI 2 years ago. I've also used travis.
I like GitLab CI the most, here's a list of nice features:
Bundled with GitLab (doh)
Excellent documentation
You can always deploy because your CI code lives next to your production code. In Jenkins, if you changed the job config without adding it to version control you're screwed
gitlab-runner runs everywhere (macOS, Linux, Windows) and is very easy to configure/install (just a go executable and you're ready to go)
Jobs declaration with stages and environment name is awesome
Supports Docker out of the box
Integrated with Kubernetes
Nice REST API
And here are a few things where Jenkins is better:
Trying to figure out why your job is pending is not obvious and you have to be an admin to see all the running jobs.
Every job starts with a completely clean git repo. You must use things like cache and artifacts to transfer files across jobs and pipelines. Sometimes I would just like a 'don't clean the git repo after checkout' option.
If your gitlab-ci.yml go out of sync accross branches, things can get tricky...
GitLab CI really insist on having one git repo per project: jobs across projects are hard to maintain.
In the same vein, you cannot have 2 different jobs depending on which folder of the source code has changed.
No plugins. You cannot for instance get a list of tests that passed with their history, for instance.
You can have the "'don't clean the git repo after checkout' option". It's under "Git strategy" in runner settings. Doesn't really make a difference if you are using containers as they're disposed after a job completes but if you are using are SSH executor it doesn't clean the workspace.
Note:
I spent many years working with Jenkins and switch to GitLab CI 2 years ago. I've also used travis.
I like GitLab CI the most, here's a list of nice features:
And here are a few things where Jenkins is better:
You can have the "'don't clean the git repo after checkout' option". It's under "Git strategy" in runner settings. Doesn't really make a difference if you are using containers as they're disposed after a job completes but if you are using are SSH executor it doesn't clean the workspace.
Wow I somehow missed that. Thanks !