Continuous Integration and Continuous Deployment or CI/CD is the process of automating the delivery of your applications.
Delivering changes more frequently and more reliably than doing it manually.
Increasingly we are seeing people start to use CI/CD practices to not only deliver applications but also Infrastructure as Code (IaC) as well.
There are a lot of tools out there that can help you deliver that CI/CD experience.
In this article I want to take a look at six common CI/CD tools and evaluate them from a features, ease of use & setup, 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 helping you to store your code, plan and track work, provide continuous testing and allow you to store and share packages.
There are five components that make up Azure DevOps:
- Azure Boards
- Azure Repos
- Azure Pipelines
- Azure Test Plans
- Azure Artifacts
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.
There are two versions of this product 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 be able 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 use the CircleCI in-app Configuration Editor or any text editor to create these YAML files.
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, but it can also be used to interact with your pipelines, re-running builds or approving 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 the build, test and deployment of code 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, and with GitHub Actions you have the flexibility and functionality to deploy Infrastructure as Code as well. The support is there whether you are a Developer leveraging the tool or an Operations Engineer.
GitHub Action workflows are created using YAML. This is probably the biggest frustration with GitHub Actions. You can only create 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 be used to 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. There is also a certain amount of free minutes and storage offered 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 on in the cloud. As well as offering CI/CD capabilities it can be used to host wiki, 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 from, 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 nice features built into it such as providing a Terraform HTTP backend to securely store state files.
Jenkins is an open source CI/CD tool. It is written in Java. Jenkins uses plugins to help you build up the pipeline that you require to automate your software build.
Jenkins can be installed on your machine to use 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 create will be called a Jenkinsfile. Blue Ocean can be used to visualise the pipelines 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 either as a cloud managed service or download the application and host it yourself.
Build your deployment processes can be done via the GUI interface. This is where Octopus Deploy excels, this interface is very easy to navigate for users who aren’t familiar with the tool or even 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 carry out 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 of the tools out there and dived into their features and usability. But of course there are a lot more tools out there that 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, my suggestion is always make a list of the things you need the tool to do for you. Then give the tools a go. Get hands on with them.
With a lot of the tools, if not all you have access to a free tier. Take advantage of those free trials. Use those free trials and test them out 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.
Top comments (7)
One other interesting project in this space is Dagger, which allows you to build CI/CD pipelines in code, and run anywhere you can run containers.
Hadn't heard of that one Erik, will check it out. Thanks.
Nice one @Sarah, I'm biased but Buildkite, is the best!
So many great tools to choose for depending on your needs! :)
Have you tried nuke.build/ ? You write your pipelines in C#, you can run and debug them locally, it's awesome! It does not replace all the tools you mention because it needs to run on a CI/CD platform but you can use it on any CI/CD platform without changing code.
Not one I've tried to be honest, but then again I don't know C# so probably not one for me, but thanks for the suggestion!
Tools Tools Tools