CircleCI, with all its limitations, bugs, and misfeatures, is free, hosted, integrates well with github, extremely simple
- and yet has enough built-in functionality to support 80% your use cases.
We went from Drone -> CircleCI -> Jenkins in the last two years. Jenkins feel opaque and hard to reason about, periodically dies for no _good_ reason and the UI is atrocious.
Drone itself was fine, as a minimal feature set. I think the docs are offline now, but it's fairly straightforward.
You must be doing something wrong then. I run a Jenkins cluster with hundreds of automated pipeline build/deploy jobs and the master node never dies. (It's also the only node up and running 24/7) You should be offloading your work to build agents.
For me at least(I don’t use it, but I do outsource “core” parts of personal code) the reason is time. Time I spend setting up VPS’s, updating build software, managing permissions etc etc is home I could spend writing code. Hence why I use gitlab rather than manage a VPS and run a perforce/svn server
Have you setup a new Jenkins deployment recently? While I personally don't really like CircleCI (or most other CI providers), Jenkins is a clusterf@#$ to setup for anything non-trivial IMHO.
Have you tried the declarative Pipeline[1] files? This plus BlueOcean[2] has made Jenkins much more user friendly, although obviously not as much as CircleCI/TravisCI/etc.
I haven't tried either, no. They do look nice, but they still only solve part of the problem.
I have only been tasked with fixing setups on Jenkins, and a friend of mine has spoken at length about how difficult things are to set up.
Some of that is based on the difficulty in getting a Jenkins configuration into source control. For CircleCI, I know, the CI configuration goes in a configuration file that gets checked in to the repo.
Another big part is making sure the development environment is sane, and replicating it. When we were dealing with Jenkins, Docker didn't exist yet. I assume that build slaves running inside Docker are a thing now? Because that's another thing that CircleCI gives us.
Honestly, though, this is just a thing that's easier to outsource if you can. Running a Jenkins server on your own is valuable if you have business reasons ("Code cannot go onto a third party server!") or if you're doing testing that involves connected devices (build and deploy to this Android device, then run tests...). But apart from that or a similar motivation, why bother maintaining a server when services are available for fee or cheap?
Agreed. Declarative pipelines coupled with pipeline shared libraries and BlueOcean have completely changed the Jenkins game. Pair that with the EC2 plugin and you have an auto-scaling build cluster!
Jenkins is fundamentally broken. Upgrade any plugin and you risk everything breaking. And you won't necessarily know until you run every corner case of your build system.
After I changed to the LTS release channel, I have yet to suffer from that. I think it has been a couple of years without a hassle.
I do wish Jenkins to be a little less high-maintenance, like say having a postgres backend and a docker image for the master. I hate having a different backup routine for each thing.