It seems that in the world of DevOps, development teams are continuously doing something. They use continuous integration, continuous delivery, and continuous deployment in order to deliver software more quickly than ever. But what do these terms really mean? They're obviously different, or else we wouldn't need different phrases to describe them. So what are the differences? We'll explore what differentiates continuous integration, delivery, and deployment by taking an exciting trip to an autonomous car factory.
Car Factory Phase One: Continuous Integration
You step into a large factory building. You soon come upon what appears to be the start of an assembly line. To the right, a robotic arm welds the car chassis together. To the left, robotic arms create transmissions and engines. The line continues, adding wheels, doors, and windshields. Testing stations along the way ensure no defects are introduced. No humans are in sight. At the end of the line, a giant crane lifts the car and places it next to hundreds of other cars within a large warehouse. The cars are complete and ready to drive. However, they're now simply sitting in the warehouse, not going anywhere. This is continuous integration. Continuous integration (CI) is a process that packages code written by developers on a regular basis. When a developer commits a piece of code to a code repository, CI takes over. Just like the autonomous car factory we explored, CI servers specialize in gathering the "pieces" of code necessary to create the final executable piece of software. CI servers run unit and integration tests to ensure no defects are introduced. CI stores finished packages in a repository. Typically, several more steps are required before the code is elevated to production. Often, the code is moved to testing environments for manual testing or performance testing. In a nutshell, CI automates the creation of an executable piece of software that is tested and ready for deployment into an environment. Jenkins is one of the most popular CI servers available. It offers an easy-to-use interface and has a rich ecosystem of plugins that allow it to build several different types of projects, such as Java, .NET, and Node.js. Try it out and see how easy it can be to introduce CI into your environment. However, the factory just got an upgrade...
Car Factory Phase Two: Continuous Delivery
You come back to the factory several months later. The assembly line is still there. You walk through the factory and down to the end of the assembly line. Instead of a warehouse full of completed cars, you see a fleet of autonomous trucks taking the cars somewhere. Why don't you hop in? The truck takes you on a long, winding road. A city appears in the distance. The truck pulls up to a car dealership and proceeds to unload the finished cars into the lot. You go inside the dealership to see what's up. A salesman walks up to you. He explains that you can buy a car any time you want, you just have to sign on the dotted line and the car is yours to take off of the lot. You have to sign some paperwork before they release the car to you. This is continuous delivery. Teams that practice continuous delivery are always ready to ship code to production. Continuous integration is a prerequisite to continuous delivery. Continuous integration creates the package but there are usually more steps before it can be released to production. Taking the next step into continuous delivery means that code is always ready to go to production. But first, someone has to take action. Usually, a product owner will approve the code before it goes live. Continuous delivery sounds pretty good. But there's one more upgrade for the factory...
Car Factory Phase Three: Continuous Deployment
Another few months pass by. You wake up one morning and walk outside to find a brand new car in your driveway. Let's take another trip to the factory to see what's going on. When you reach the end of the assembly line this time, you see the same fleet of trucks. However, each truck has been updated to hold multiple cars. As you walk closer to the cars, you see papers on them with people's addresses. The factory cut the dealership out of the equation. The cars are going straight to people's houses without anyone having to sign paperwork. No fuss, no muss. This is continuous deployment. Continuous deployment allows code to be pushed straight to production after the developers commit it. There is no approval process or sign-off. This is how companies like Netflix deliver code thousands of times per day.
Continuous integration, delivery, and deployment are really great and fun. But do you have to do all of them? How do you get started?
Continuous Strategy
So how do you implement each of these strategies? First, development teams need to discuss with the product owners how best to deliver the software. Make sure all parties are comfortable with the different options. But assuming you want to eventually deliver to production multiple times per day, you still need to have a strategy. It's best to ramp up over time as you get more comfortable with the various technologies and techniques. Remember, technology is not the only change happening when you adopt these techniques. A large cultural shift comes along with it. So start with continuous integration. In fact, many development teams today have continuous integration figured out since it has been a common practice for some time. The jump from continuous integration to continuous delivery is probably the largest leap for the team. The ability to always be ready to promote code to production is not easy to achieve. It requires strong discipline and a good testing strategy on the part of the developers. Well-tested code is the only way to deliver with confidence. Make sure your test suite is top-notch before trying continuous delivery. Once you have a solid test bed in place and know that your code is good, continuous deployment is the next step. It's not a huge jump since you are simply removing the human pushing the button. However, solid monitoring of your production systems should be in place so that if anything does go wrong, you can correct it quickly.
Which Factory Will You Build?
So which is best for you? Do you store your cars in the warehouse? Do you keep them at the dealership? Or do you send then straight to people's homes? The model you choose is largely up to you. Every development team should practice continuous integration at a minimum. Develop continuous delivery and continuous deployment along with the maturity of the product and your processes. No matter which you choose, understanding where they fit will allow you to deliver business value at the right speed for your team.