Choosing a CI/CD System

Once a source control system was decided on and stood up. The next logical step for me was to identify a continuous integration and delivery platform to pair with it. On the home-lab I use the combination of GitLab and the integrated CI/CD system in the suite. With this new environment I wanted to put all the pieces together myself so that the amount of magic was at a minimum. Here are the following CI/CD systems I read about and evaluated.

My criteria was software that I could self host and maintain. The software also had to be something that didn't hide the internals from me and would be flexible enough to work for the foreseeable future.

I have a particular love for Jenkins, and I almost went with it. The Blue Ocean UI is quite beautiful and functional and the jenkinsfile plugin allows for very similar behavior to my existing GitLab setup. However Jenkins is a nightmare for stability and security, and as a one man shop maintaining it could become a full time job. Ultimately Jenkins wasn't going to tick the easily maintainable box.

Drone looked really interesting as the model it used was even more familiar to me. I ran a drone CI for awhile and I enjoyed interacting with it. However I ultimately moved away from Drone as it just wasn't scratching my itch and I sometimes found myself fighting to configure it to do what I wanted. I'm certain that if I had stuck with Drone, that it would've met most of my CI/CD needs and that would be good enough.

Ultimately I settled on Concourse, the “Do Things With Containers” approach really appealed to me and it seemed like a reasonable decision for a piece of infrastructure that might pull double duty within my system. The ability to have multiple pipelines based on a resource also seemed like something that might be advantageous, perhaps breaking the testing, build, publishing and deployment steps into separate pipelines with some sort of semaphore or messaging system between it. As it is, I'm not sure if that's what I'll do, but we'll revisit it in the future after I've been using the setup for a reasonable amount of time.

This is my current Concourse landing page. I've moved a decent number of jobs over to it, ranging from docker image builds through a TypeScript bot for my matrix server.

Concourse Main Page