- GL is waaaay easier to setup and maintain, both initially (installation, configuration and upgrades) and especially when configuring runners and per-project tasks
- GL saves information about tasks in a file which is part of repo. This might seem counter-intuitive at first, but it makes sense when you realise that build process depends on version (if you want to be able to build old versions of your products). Also, this way config is part of source repo so backup is easier.
- Jenkins can do anything - with a proper plugin. Hunting for the right plugins however is a neverending story. God forbid you ever have to reinstall Jenkins...
Of course that's just my experience. Until GitLab came along we have used Jenkins for a few years and... well, it worked. But it's UX is not comparable to GitLab's.
- Brief explanation: https://github.com/ipfs/infrastructure/issues/100#issuecomme...
- Spreadsheet comparing features: https://docs.google.com/spreadsheets/d/11kTloM6d1CGu_ycmP3Xz...
Check out those links and you should get a good overview
Sounds like that is solved.
I did something similar but only for hosted solutions
http://blog.codepipes.com/hosted-ci-comparison/hosted-ci-com...
I am preparing another blog post for on-premise (GoCD, Jenkins, Concourse etc.)
Do others have this need? Or are people generally focusing on keeping CI runs short and landing changes in a serial fashion?
Rather, we test each branch as it was merged into master (in isolation), and when master changes, trigger builds for PRs that now are changed.
The "Cross Project Testing" and "Cross-Project Dependencies" is something we're deeply in need of though, and already do somewhat. The dependencies are implicit now though (via npm or our golang package manager, gx) rather than explicit.
If anyone have ideas for "cross project testing with dependencies" on Jenkins, I would be very happy to hear them.
Gitlab CI:
==========
+ No infrastructure required. I like to work on my private projects and not their servers.
+ Mostly-declarative syntax with a easy way out when required. Jenkins until recently only had imperative options (scripts in a UI/scripts in classic Pipeline)
+ Caching between builds is inbuilt, while in the past we had to roll our own with Jenkins
- No easy way to share the same script between repos without copy/pasting your .gitlab-ci.yml.
Jenkins:
========
+ More options to display output. Need to have your tests list which ones passed and which failed? Done.
+ Credential Management is better, at least at the "early adopter" free tier I'm on for Gitlab.
- The Legacy/Default UI is bad. The Blue Ocean UI is a bad UI in a winamp skin.
- Integrating plugins designed with pre-workflow jenkins in mind to Jenkins Pipeline is a bit awkward, often requiring you to know which class is used internally in the plugin.