Continuous Integration and Continuous Deployment, or CI/CD, is the process of automating the delivery of your applications.
We are delivering changes more frequently and reliably than doing them manually.
Increasingly we are seeing people start to use CI/CD practices to not only deliver applications but also Infrastructure as Code (IaC).
There are a lot of tools out there that can help you deliver that CI/CD experience.
In this article, I want to look at six common CI/CD tools and evaluate them from a feature, ease of use & set up, and supported environment point of view. I’ve listed them in alphabetical order, not in order of preference.
Azure DevOps is a Microsoft tool. It can help you with the CI/CD processes as well as help you to store your code, plan and track work, provide continuous testing and allow you to store and share packages.
Five components make up Azure DevOps:
The Azure Pipeline part is the CI/CD tooling part of the product.
Azure Pipelines can be created using YAML or using the classic editor, which is a drag-and-drop GUI interface.
Two versions of this product are available: Azure DevOps Services and Azure DevOps Server.
Azure DevOps Services is the cloud-hosted product, whereas Azure DevOps Server is the self-hosted version. Both are priced slightly differently.
For those looking to get familiar with this CI/CD tooling, there is a free plan available which gives you limited functionality but enough to get some hands-on experience.
CircleCI is a CI/CD platform that was founded in September 2011. CircleCI monitors your GitHub, BitBucket or GitLab code repositories and can launch a build after each new commit.
CircleCI supports Go, Java, Ruby, Python, Scala, Node.js, PHP, Haskell or any language that runs on Linux or macOS.
As with other tools, CircleCI pipelines are written using YAML. You can create these YAML files using the CircleCI in-app Configuration Editor or any text editor.
There is an official extension you can install within Visual Studio Code (VSCode) which can be used to help with the syntax writing of the YAML files. Still, it can also be used to interact with your pipelines, re-running builds or approve jobs.
CircleCI pricing can be found here. In 2022 their free tier received an upgrade; instead of only being able to run one job at a time, you can now run up to 30 jobs at a time.
GitHub Actions is a CI/CD platform that is built within GitHub. You can automate code build, test and deployment directly from a GitHub repository.
These workflows can be triggered based on a bunch of scenarios, some include:
- Labels assigned to GitHub issues
- When a pull request is made, the repository
- When a merge is made to the repository
- Schedule them to trigger using CRON expressions
- When a folder or file changes
As I mentioned earlier, CI/CD practices are not just used to deploy software code; with GitHub Actions, you have the flexibility and functionality to deploy Infrastructure as Code. Whether you are a Developer leveraging the tool or an Operations Engineer, the support is there.
GitHub Action workflows are created using YAML. This is probably the biggest frustration with GitHub Actions. You can only make the YAML files using a text editor; there is no GUI available to help you create them. This can be frustrating, as YAML is sensitive and doesn’t like things like spaces being used; it prefers tabs.
That being said, tools like Visual Studio Code (VSCode) and the YAML Language Support by Red Hat extension can help with the formatting and syntax when creating or editing the YAML files.
GitHub Actions usage is free for standard GitHub-hosted runners in public repositories and for self-hosted runners, which makes it very accessible to any hobbyist or someone who is looking to learn. A certain amount of free minutes and storage isoffered for this using private repositories. Minutes used reset every month.
If you are looking to run GitHub Actions for your organisation then looking at pricing plans is something I’d recommend.
GitLab is a CI/CD tool that can be hosted on-premises in the cloud as well as offering CI/CD capabilities, it can host wiki, and issue tracking and has a Web Integrated Development Environment (IDE).
GitLab pipelines are created using YAML. Within the web version of GitLab, there are a lot of templates you can use to start building your pipeline, you have a text editor, and there are also visualisation and validation options to help you.
Like the other tools, there is a first-party plugin from GitLab you can use when using an external text editor like Visual Studio Code (VSCode) that allows you to interact with your pipelines.
There is a free 30-day trial where you can sign up to test GitLab without a credit card. Beyond that, there are paid plans available to you.
GitLab has some excellent features, such as providing a Terraform HTTP backend to store state files securely.
Jenkins is an open-source CI/CD tool. It is written in Java. Jenkins uses plugins to help you build up the required pipeline to automate your software build.
Jenkins can be installed on your machine or you can deploy it inside something like a Docker container.
It is a free tool; there are no paid plans available.
To create your Jenkins pipelines, you use the Groovy Domain-Specific Language. The file that you make will be called a Jenkinsfile. Blue Ocean can be used to visualise the channels but it’s important to remember that it is not being enhanced any more and only receiving security updates.
Octopus Deploy is a tool that focuses on the CD part of CI/CD. It needs to be partnered with a CI tool. You can use Azure DevOps, GitHub Actions, Jenkins etc, for the CI processes and then use Octopus Deploy for release management, deployments and operations.
You can sign up for Octopus Deploy as a cloud mcloud-managede or download and host the application yourself.
Building your deployment processes can be done via the GUI interface. This is where Octopus Deploy excels; this interface is straightforward for users unfamiliar with the tool or the CI/CD process. It’s intuitive.
You can also version control and write your deployments using Octopus Configuration Language (OCL) with their Config as Code feature.
Within Octopus Deploy, you have a section for Deployments and a section for Operations. Within the Operations section, you have something called Runbooks. Within Runbooks, you can deploy Infrastructure as Code or perform maintenance tasks.
There is a free 30-day trial where you can sign up to test Octopus Deploy without a credit card. You can get a free 12-month trial of Octopus Deploy Server, which you would host yourself. It’s a well-hidden free option, but it is there, at least it is at the time of writing this article. Beyond that, there are paid options available to you.
I’ve picked six tools and dived into their features and usability. But, of course, many more tools can be used to help with the CI/CD process.
The right tool for one project or organisation might not be the right tool for another project or organisation.
Each tool has its advantages and disadvantages.
When trying to pick a new tool, I suggest always making a list of what you need the means to do for you. Then give the tools a go. Get hands-on with them.
With many tools, if not all, you have access to a free tier. Take advantage of those free trials. Use those free trials and test them against your priorities and needs.
Don’t be swayed by what you see on social media or what a salesperson says.
The right tool is the one that matches your needs.