CI/CD and me
Tags: cd, ci, devops, tooling
Published: 2019-10-01 09:52:34

Figured I'd finally get around to writing my own tech article about the experiences I have had with a number of the CI/CD technologies that I have worked with over my nearly 2 years working as part of the culture that is DevOps.

The key tools I have used are as follows:

    Jenkins
    Concourse
    TeamCity
    Octopus
    GitLab pipelines
    GitHub pipelines

Jenkins is an open source CI and CD tool meaning it has a ton of modifiability and is extremely versatile as to how it is used and configured. It has a pretty steep learning curve at times but has been a super powerful tool to aid in building integration and deployment pipelines throughout my journey into DevOps. Some examples of what I have been able to do with Jenkins involve packaging a maven based application into a dockerised jar microservice which was then pushed to an internal docker registry (we used ArtiFactory and AWS's ECS registry a few times) before being deployed to a specific Kubernetes namespace (which was generated using Kops also via Jenkins!). It's an incredible tool for CI/CD but can be pretty intense to get to grips with at first... Jenkinsfiles and pipeline files are extremely useful when gotten right and the extensive community support for the Jenkins project makes it a top notch open source tool. Also the fact that it's free is always a good one :P

Concourse is up next and is primarily a CI tool.
This one creates an interesting interactive visual pipeline. It makes CI a very pretty affair but is a bit on the difficult side to get right with the configurations. Everything is done in YAML (which can be a yay or a boo depending on your outlook ha). At the time I was looking at this (Jan 2017) documentation was on the weak side but it looks like they have improved on that factor for sure since then.

TeamCity is the CI offering from JetBrains. It's a simple, no frills CI tool which does the job it's designed for. Has a bunch of plugins available but is not my preferred method thanks to the closed source nature of the product and the fact that while it has a free variant its offering is not the greatest.

Octopus Deploy is a CD offering with integrations into the likes of TeamCity and Jenkins. It has these things called deployment tentacles that push out new versions of builds to the relevant nodes on receipt of a successful build from TeamCity.

GitLab Pipelines is GitLab's own native CI/CD client that is offered free as part of GitLab itself. Not played around too much with it currently but what I have seen so far has been reasonably good and pretty intuitive.

GitHub Pipelines is what I've been using most recently and its a pretty nice implementation allowing you specify your pipelines as yaml code to build infrastructure using the likes of Jinja2, Docker and Terraform in conjunction with one and other. It's pretty nice to use and decently straight forward to get to grips with allowing you to tweak the pipeline code as part of your git repo itself. Tweak, push and build.

Of the ones I have used I think I like Jenkins the best (with like being a strong word ha) due to the sheer modifiability and tweaking you can do with it... GitHub pipelines being second currently, but for now I'll still be exploring the various tools out there to find which has the best fit in my arsenal of tools. There are other tools such as Spinnaker (Netflix's CI/CD tool that looks too cool!), Tekton, JenkinsX (the Kubernetes pipelines tool), TravisCI, CircleCi, Drone and goCD as well as a bunch that I likely haven't skimmed over so don't think that this is an exhaustive list by any stretch of the imagination.

There is also the additional interesting development of the CD Foundation that you can find out more about here:
https://cd.foundation