Once upon a time, back when waterfall was the primary software development methodology, you could spend months or years working on a single software project. With the help of agile methods, programming cycles were reduced to days or weeks.

How quaint all that looks now! Weeks? Ha! In today’s DevOps-driven world, we use continuous integration, continuous delivery, and continuous deployment (CI/CD) to update programs in time frames measured in days or hours. For example, with its CI/CD pipeline, Netflix takes less than half an hour to move its programs from code check-in to multi-region deployment.

Can you say fast? I knew you could!

Automation is a key part of the CI/CD process, so naturally there are several tools that aim to help you manage the tasks. To set the stage, let’s review the basics of CI/CD before I give you an overview of some popular CI/CD tools.

How CI/CD works: A short refresher

In CI, developers integrate their code into a shared code repository’s main branch early and often. The goal is to reduce development costs by dealing with issues as soon as possible.

With continuous integration, the software is not written in isolation and then merged into the larger system at the end of a development cycle. Typically, code is integrated multiple times a day. Thus, programmers can resolve code conflicts and other issues while it’s still relatively easy to fix them.

Doing this manually would be incredibly time-consuming and annoying. For practical purposes, nearly every CI setup uses automated test suites. When code is ready to merge, an automated process kicks off a new codebase build. The automation also runs a suite of quality assurance tests to check for bugs and determines if the update introduces integration problems.

Continuous delivery is the next step after CI, in which you also automate release cycles. This may mean deploying new application versions when the software passes automatic tests. For instance, one such test, called a canary release, rolls the application out to a small subset of users; after getting their sign off, the system releases the software to production.

Finally, once an IT shop is comfortable with continuous integration and delivery, it can attempt continuous deployment. New code is continuously released to users in a process called a pipeline. All changes that pass successfully through the production pipeline’s automated tests are automatically released. That means the end of release days or Patch Tuesdays. When all works well, the code moves smoothly and automatically from programming to testing to release.

To make all this happen—and achieve the “when all works well”—you need the right tools. Here are some of the best known ones.

Jenkins

If you know of any CI tool, chances are it’s Jenkins. This open source program, which is supported by CloudBees, is one of the oldest and best-regarded CI programs. It also has about 2 million users, making it the most widely deployed CI program.

Jenkins is a cross-platform CI tool that can be configured both through a GUI interface and console commands. Jenkins’ CI process can be defined either declaratively or imperatively using the Groovy language or with text boxes using Jenkins’ web user interface.

Jenkins is noted for its flexibility. In large part, that’s thanks to the ease of adding plugins and the power provided in doing so. This can be a mixed blessing. Since everything is done using plugins, from listening for web hooks and watching repositories to supporting Docker, some DevOps consider Jenkins to be fragile.

Written in Java, Jenkins began as a fork of Sun/Oracle’s Hudson in 2011 and was released under an MIT license.