I hear these terms together and wonder what is the difference? How are they related to continuous builds and continuous deployments?
Continuous integration / continuous builds is all about getting developers to commit code to a source code repository little and often (and get the latest version from the repository, so any further changes are based on other developers recent changes). This reduces the time wasted on merge resolution, as it's easier to merge in this case.
The process is best automated using a build server, which can also run any Unit Tests. Feedback is then provided to the developers in the case of a build / test failure, so that any issues can be fixed quickly.
Continuous deployment involves the automated deployment of the build artefacts from the build process onto the test and production environments. To mitigate the risk involved with this, people often use feature toggles to separate the release (in a controlled way) from the deployment.
Continuous delivery is less about the technology and more about the organisations approach to software delivery (although is does make heavy use of automation).
DevOps is a much larger area that generally emphasises breaking down barriers between developers and operations teams, and getting them to collaborate in a way where they benefit from combined skills. More automation of environment provisioning, build deployment, monitoring (and reacting automatically to problems and scalability), and in some cases software defined networks will come out of this in a company. In some organisations, dedicated DevOps team(s) has been created.
Continuous Delivery (CD) is a concept that was first described in the 2010 book co-authored by Jez Humble and David Farley, both of ThoughtWorks.
Continuous Integration and Continuous Delivery often get confused with one another, but there are some key differences:
- CI can be done by one dev where CD requires team collaboration
- CD cannot be done without CI
- CD is a linear journey where CI is a continuous feedback (build) loop moving CD forward
- With CD you are always ready to push to prod
- CI allows you to check your code into repo multiple times so you can detect your issues early on
Here is a quote from Martin Fowler:
"Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly."
The main difference between Continuous Delivery and Continuous Deployment, is automation. You automate the deployment side of things. This works well if you are pushing to production multiple times a day or for a variety of other reasons.
As for DevOps, that's a whole other ball of wax. People often think DevOps is a role or a tool, but it's really a culture. You don't "do" DevOps. Here's a quote from Mike Kavis that I like quite a bit:
"DevOps is a culture shift or a movement that encourages great communication and collaboration (aka teamwork) to foster building better-quality software more quickly with more reliability."
There's probably some ambiguity in how the continuous xxx phrases are used by different people, but I think this blog post sums it up pretty well.
DevOps is more of an overarching idea than a specific practice, a bit like Agile is the idea, and unit testing is a practice.
© 2022 - 2024 — McMap. All rights reserved.
DevOps
SE proposal on Area51, in case you'd be interested in joining: area51.stackexchange.com/proposals/85819/… – Chemoreceptor