Table of contents
The Difference Between Continuous Integration, Deployment and Delivery
Do you remember in high school it seemed like all the cool kids seemed to be speaking in their own code? Well, itβs a bit like that in DevOps circles today.
Everybodyβs talking about Continuous Integration (CI) this, Continuous Deployment (CD) that. And who knows, you might even hear some people mentioning Continous Delivery (CDel).
However, how do you know theyβre βwalking the walkβ, when it comes to doing DevOps, and not just βtalking the talkβ?
No Continuous Integration, No Deal
I was once at a Dev Ops summit, and I remember hearing a conversation between two engineers. One of them was boasting that due to CI being hooked into his organizationβs software development system, his engineering team was able to detect, locate and fix software and security bugs every time they merged code into their master branch.
The other looked amazed. He commented that it took his team ages to find and fix issues, as his engineering team only ran builds and tests at the end of each development phase. And then he asked, βSo, how often are you merging to the master branch then?β, to which the other guy replied βIt depends. Seeing as we trigger builds and tests manually, sometimes we merge more often than others.β This is a prime example of someone talking the talk.
Itβs true CI is all about frequently merging code into the master branch, but without automating builds and tests, itβs simply not possible to find and fix issues at the rate needed to claim youβre doing CI.
If you have CI successfully implemented, your engineering team will be able to merge code to the master branch up to a few times a day. Furthermore, due to the automated processes in place, you can rest assured that youβre left with a dependable codebase which is ready to progress through the SDLC. Subsequently, without doing CI properly, itβs impossible to do be doing DevOps.
Continuous Deployment. Itβs the Talk of the Town
Youβre at a dinner party, and talk turns to agile software development, as it naturally does. If someone asks you βAs part of CD, do you batch large amounts of code into Staging before deployment?β Beware! Itβs a trap.
CD is all about automatically deploying code into production, after it passes the automated build and tests you have plugged in as part of CI. This means no large-scale batching in Staging.
Additionally, to successfully release code, it must not only be dependable, but have all its configurations locked and loaded, so itβs ready for the end user. Therefore, if youβre doing CD properly, thereβs a very good chance youβre on your way to DevOps success.
However, with all this talk of βcontinuousβ this and βautomatedβ that, what is the actual difference between CI and CD?
Whatβs the Difference between Continuous Integration and Continuous Deployment Anyways?
You probably wonβt be surprised that the two are closely linked, however there is a difference between CI and CD. And the difference lies in the detail.
Think of CI and CD in terms of a car assembly line. CI is concerned with checking to see if all the carβs parts are of high quality, if theyβre installed correctly, if they function effectively etc. Once all the tests have been made, itβs time to see if the machine as a whole is ready to be passed to the consumer. This is the role of CD.
If youβve got CI and CD successfully implemented, the transition between the two should be seamless. In fact, it should be so simple that anybody can trigger the process at the push of a button.
Now weβve got the understanding of CI and CD under our belts, letβs talk about Continuous Delivery (CDel).
Wait a Sec. Arenβt Continuous Delivery and Deployment the Same Thing?
From conversations Iβve had with many engineers across many verticals who like to flaunt their DevOps, many think that CD and CDel mean the same thing. Well, you might be interested to learn they donβt. And the difference between CD and CDelΒ lies in choice.
With CD, code is automatically deployed after each successful master branch merge, while with CDel your organization can choose whether itβs released to the customer.
Teams usually choose to stick with CDel, and not progress to CD, for business reasons. For example, teams may not want to release a feature into production after every successful merge because, to put it simply, itβs still in development, and so only half-baked.
Put it this way. Youβre building a cellphone. The receptionβs great. The audioβs perfect. Yet the camera, although functioning, is slightly below optimal res. Do you think itβs ready for the consumer?
So, now we get on to the big question. Why should you care about adopting CI, CD and CDel anyways?
If Youβre Not Hooking Continuous Integration, Delivery/Deployment Into Your SDLC, Maybe You Shouldβ¦.
As code is tested and deployed continuously, you can detect software and security bugs earlier in the software development process. Therefore, by shifting left testing to the earliest stages of your SDLC, issues are easier and cheaper to find and fix, as you donβt have to dig through mountains of code to do so.
Furthermore, software development is not just about developers. For example, security has an essential role to play as well. Therefore, by adopting the agile software practices we have already mentioned, you can increase code visibility not only within engineering, but also between other departments as well. Security can see the results of the automated tests, and feedback to engineering if there any security issues to be tackled or coding practices to be improved.
Finally, hooking CI and CDel/CD into your SDLC not only benefits communication between your engineers and other departments, but managers as well. As code is released more frequently, management has a greater volume of code to analyze, so they can see if product development is on the right track.
Want to Do DevOps?
Now the ins-and-outs of CI, CD and CDel have been laid out for all to see. Next time you hear someone talking about βdoing DevOpsβ, youβll be able to sniff out an imposter a mile off.
And who knows. If you havenβt already integrated some of the agile practices discussed above into your SDLC, maybe you just might think about giving some a try.