Continuous integration and continuous delivery (CI/CD) are two of the biggest trends in software development. As companies move to release higher quality software at a faster pace, developers and engineers need new approaches to building, testing, and delivering products. As a result, many companies are turning to Docker to build, test, and deploy their applications.
CI/CD tools are commonly built on a master/agent model, where a server (the master) delegates tasks to multiple nodes (agents). An agent may get tasked with building the application, running tests, or any other task in the build process. Containers are used to host not only the master, but also the agents and their work environments. The result is a build environment that’s reproducible, scalable on demand, and portable to different servers or platforms.
In this post, we’ll list 10 popular CI/CD tools and their ability to integrate with Docker.
1. Jenkins
Arguably the most popular CI/CD solution available, Jenkins is a Java application with its own built-in web UI. Originally developed in 2004 as Hudson, its popularity is due in part to its history, cross-platform compatibility, and extensive plugins. In 2017, a newly designed UI called Blue Ocean was released to simplify the configuration process even further.
Jenkins provides Docker images for running a server as well as agents. The Jenkins wiki has more information on configuring agents. Jenkins is an open source project.
2. Microsoft VSTS
Visual Studio Team Services (VSTS) is Microsoft’s cloud-based equivalent to the on-premise Team Foundation Server (TFS). Like GitLab, VSTS isn’t just a CI/CD service but also a code repository and project planning suite. VSTS is tailored to Visual Studio but supports a wide variety of version control systems, programming languages, and deployment targets. You can also host build agents using Docker.
VSTS is free for teams of 5 users or less and starts at $30/month for more users.
3. Bamboo (Atlassian Dev Tools)
Bamboo is an on-premise CI server. As an Atlassian product, Bamboo integrates closely with Jira Software, Bitbucket, Fisheye, and Hipchat. Like GoCD, Bamboo lets you create complex pipelines running on multiple agents. While Bamboo supports Docker agents, those agents are persistent and must register with the Bamboo server. Dynamically created agents are only available on Amazon’s EC2 service.
Bamboo comes with a 30 day trial. Pricing is based on the number of build agents. While Bamboo is on-premise, Atlassian offers a similar hosted service called Bitbucket Pipelines.
4. GitLab
GitLab is a suite of tools for managing almost every aspect of the software development lifecycle. The core product is a web-based Git repository manager with features such as issue tracking, analytics, and a Wiki. The CI/CD component allows you to trigger builds, run tests, and deploy code with each commit or push. You can run build jobs in a virtual machine, Docker container, or on another server.
GitLab is available as an open source Community Edition, as well as a commercial Enterprise Edition. It’s available as both a hosted service and as an on-premise installation.
5. Codeship
While other tools provide a UI for advanced configuration, Codeship (which was acquired by CloudBees) is mostly driven by scripts. Codeship Basic allows you to specify your language, framework, setup commands, and deployment options, but limits the build process to those options. Codeship Basic is also limited to running in virtual machines.
With Codeship Pro, the build pipeline runs in Docker containers. This requires you to provide a Dockerfile (or Compose file) with your application. However, Codeship Pro lets you store your build service configuration as a file in the root of your repository.
Codeship Basic starts at $49/month, and Codeship Pro starts at $75/month.
6. Codefresh
Codefresh offers Docker-in-Docker as a service for building CI/CD pipelines. Unlike the other tools on this list, each step of a pipeline runs in it’s own container. In addition to the ability to build, test, push, and deploy images Codefresh has a built-in Docker registry, a Kubernetes dashboard, and release management with Helm.
Codefresh is available both as a cloud service and on-prem. The free tier includes unlimited builds/mo with customizable paid plans starting at $19/mo for additional features, users, and/or storage.
7. TeamCity
TeamCity is an on-premise CI server created by JetBrains. TeamCity claims to be an intelligent CI server: that is, it detects the technologies used in your application to auto-generate build steps. For example, if your repository contains a Java application using Gradle, TeamCity may suggest “gradle build” as a build step.
The built-in Docker integration lets you run the TeamCity server and agents in Docker containers. You can even run individual build steps in separate containers. With the Kubernetes plugin, you can easily deploy your build service across a cluster.
TeamCity is available for free with a limited license, as well as a paid subscription.
8. Travis CI
Travis CI is a hosted service specifically for GitHub projects. Because of its tight integration with GitHub, Travis CI is simple to set up. After linking it to a repository, it automatically triggers a new build on each push. Builds can run in Docker containers as well as dedicated virtual machines. Travis CI supports a wide variety of programming languages, build tools, and deployment targets.
Travis CI is free for open source projects and offers subscriptions for private projects.
9. GoCD
GoCD is an open source, locally installed build service. Like TeamCity, GoCD uses a single build server to control multiple build agents. As one of the first CI tools designed around pipelines, GoCD lets you configure complex build processes such as chaining tasks together, waiting for certain tasks to finish before starting new ones, and running multiple tasks in parallel. Other CI tools are gradually adopting pipelines, but GoCD makes them first-class citizens.
By default, build agents are fully provisioned and poll the service for new jobs. The elastic agents feature dynamically provisions agents when jobs enter the build queue. GoCD provides plugins for Docker or Docker Swarm, letting you scale up and scale down your build service on demand.
GoCD is an open source tool with optional paid support.
10. CircleCI
CircleCI is unique in that it supports building, testing, and deploying iOS and macOS projects using dedicated Mac virtual machines. You can also build projects using Linux virtual machines and Docker containers. CircleCI also provides a suite of management tools such as troubleshooting build agents over SSH, creating save points during builds, and caching Docker images for future builds.
CircleCI is priced by container and platform. You can use one hosted Linux container for free, but macOS containers and on-premise installations are only available via subscription.
Fortunately, several of today’s most popular CI/CD solutions include support for containers. It’s simply a matter of configuring them to leverage container environments for testing and deployment. For organizations like Condé Nast, switching to a container-based CI/CD pipeline reduced the time to deployment from several days to several minutes while helping developers utilize the build infrastructure more efficiently. As CI/CD solutions improve their container support, many organizations will see a decrease in their build time, test time, and time to release.
CI/CD tools can also provide the automation required to “shift left” security into the development process, ensuring that Docker images are free from vulnerabilities, embedded secrets, and configured according to security and compliance best practices. Aqua has some great plug-ins and integrations with all popular CI/CD tools to empower developers to embed security testing into their builds, right there within their regular build environments.