The SeaLights Software Metrics Guide
for Better and Faster CI/CD
6 CI/CD Tools to Build Your Next-Gen Delivery Pipeline
It’s not easy to build a true CI/CD pipeline, but the right tools can make it more manageable. In this article we will explain the differences between Continuous Integration (CI), Continuous Delivery (CD) and Continuous Deployment, and review the top 6 CI/CD tools that can help you build your next generation software delivery pipeline.
Building a true CI/CD pipeline involves:
- Automating handoffs between teams
- Writing automated unit, functional, and UI tests
- Building a realistic test environment which can be replicated and spun up automatically
- Optimizing build processes to ensure you can run builds and tests in no time
Continuous Integration vs. Continuous Delivery vs. Continuous Deployment
Before we begin, let’s clarify three key terms: Continuous Integration, Continuous Delivery, and “the other CD”, Continuous Deployment:
- What is Continuous Integration? The software development practice of merging the latest code changes with the main branch as often as possible. Every time changes are merged is an “integration.”
- What is Continuous Delivery? A development pipeline in which every release can potentially be deployed and released to end users. Automated, manual, and acceptance tests are all built into the pipeline so that when a build exits the pipeline, it is ready to be released. It should be a pure business decision whether to release a build, or not.
- What is Continuous Deployment? Like Continuous Delivery, only every build is actually pushed to end users. Fixes and adjustments are made on a “roll forward” basis, by making changes to the codebase and immediately deploying new iterations of the software. This extreme approach is practiced by huge development organizations such as Google, Facebook and Twitter, each of which deploys hundreds or thousands of builds every day.
Top 6 CI/CD Tools
Jenkins is one of the oldest and most popular CI tools—a cross-purpose, open source tool which offers both a GUI, including a brand new one called Blue Ocean, and a CLI interface. Jenkins is very flexible due to its ecosystem of thousands of plugins (you can even add your own). Its architecture distributes builds and test loads on multiple machines, and has been known to scale up successfully to thousands of builds. Jenkins provides Docker images for running a server, as well as agents that can run on existing servers.
Pricing: Free and open source, offered as a hosted solution by CloudBees
GitLab is a family of tools that touch almost every part of the development pipeline, with a full-featured open source Git repository manager at its core. GitLab CI is a CI/CD engine that integrates with GitLab and can hook to projects using the GitLab API. It can trigger builds, run test suites and deploy code with each commit. GitLab can automate complex deployment sequences using runners written in Go. You can run builds in a VM, Docker Container, or server of your choice.
Pricing: Free for small teams, pricing starts at $4 / user / month
Travis CI was probably the first hosted CI solution, and offers an on-premise version as well. It has a tight integration with Github, making it easier to get started. Travis builds are configured by adding build tasks to the .travis.yml file. It supports a large variety of languages and integrates with numerous other build tools and deployment targets. Like the other tools featured here, it supports running builds in Docker containers and dedicated VMs.
Pricing: Free for open source projects or up to 100 builds, paid plans start from $69 per month
Platform: Hosted and On-Premise
TeamCity is made by JetBrains, the maker of very popular developer tools such as the IntelliJ IDEA Java IDE. Its free version offers full functionality, but is limited to the number of build configurations (100) and build agents (3) you’re allowed to have.
TeamCity is an installed product which works on all popular platforms and supports many tools and frameworks. Like Jenkins, it has a large plugin ecosystem (though not quite as big). TeamCity is written in Java but offers good .NET support, making it an alternative to the heavyweight Microsoft TFS. It is an intelligent build system which automatically detects technologies used in your application to suggest build steps. TeamCity lets you run its server and agents in Docker containers, and run individual build steps in separate containers.
Pricing: Free for up to 100 build configurations and 3 build agents, enterprise server starts at $1,999
CircleCI is based around containers which are dedicated Mac virtual machines (it also supports Linux VMs or Docker containers). CircleCI runs one build container for free and lets you choose how many containers you want to run, and how many parallel builds per container. It supports Java, Ruby on Rails, Python, Node, PHP and Scala.
Pricing: Free for first container, each additional container $50 / month
GoCD is a free born-for-CD tool by ThoughtWorks corporation. It uses the concept of pipelines to let you model and automate complex build processes easily. It also lets you run builds much faster by parallelizing execution of tasks. Go can dynamically provision agents using containers, and provides plugins for Docker or Docker Swarm to let you scale up build services on demand.
Pricing: Free and open source with optional paid support
Our Advice—Tools Come Second, Culture First
CI/CD is a few years old and tools have gone a long way. As you saw above, there are several options to build a solid software delivery pipeline with all the bells and whistles. However, before you start implementing tools and building the infrastructure—make sure everyone is on board. Does management really understand the implications of continuous delivery? Are clients ready for it? Are all development teams on board? Do you have the test automation infrastructure to support it? Have you figured out compliance, audits and security?
Make sure everything is in place and your organization is aligned before bringing in the tools. Think of a CI/CD tool as a powerful weapon, which can be dangerous in the hands of untrained soldiers. Get your troops into bootcamp and then you’ll see how powerful the tools can be.