DevOps is emerging as a new buzzword across the channel, especially as containers like Docker's take off. What is DevOps, and what does it have to do with related terms like agile development, continuous delivery and scripted infrastructure? Here's an overview.
I should start by making clear that DevOps -- which is short for Developer Operations and has been used since 2009 -- has no official definition. It can mean different things to different people. At its core, however, are several basic principles. They include:
- Increasing collaboration between the people who write code (developers) and the people who deploy, manage and administer apps (IT operations teams).
- Integrating software coding, testing and deployment processes.
- Reducing environment variables so development and deployment are more predictable and more efficient.
- Making software development and deployment scalable by automating as many processes as possible.
Taken together, these concepts are changing the way companies create and deliver software. Traditionally, programming and deployment were siloed operations. Indeed, in some respects the trend was away from integration, rather than toward it, since object-oriented programming emphasizes modularity rather than tight integration of various moving parts. DevOps is taking things in a different direction.
The result is software that is delivered faster and offers more stability. These are especially important benefits in an age when more and more computing happens on mobile devices, where consumers expect everything to occur in real time, and in the cloud, where high-availability and portability are essential.
What Does DevOps Have to Do with Containers?
The place where you're likeliest to hear the term DevOps used today is the conversation about containers. Container platforms from companies like Docker, CoreOS and Canonical (which recently released LXD for production) have been in development for the past five years or so, and they're finally beginning to enter production environments.
The main reason why containers are an important part of the DevOps revolution is that they make it easier than ever to package software in a platform-agnostic way. If you write your app to run inside a Docker container, it will work in any data center or cloud that supports Docker. And it can move easily between different hosts. It virtually eliminates environment variables.
True, you could achieve the same effect using a traditional virtual server image on a platform like VMware. But that entails much more overhead, since you would have to virtualize an entire OS, rather than just a container. Plus, even if you try to keep your OS images consistent, they will inevitably involve many more configuration variables than a container.
Containers are also valuable in DevOps operations because they allow programmers and admins to test new code and configurations very quickly by spinning up new containers. The result is the ability to develop and test code on a continuous basis. That beats the old method of writing some code, pausing development so you can test the code, compiling and running the code, evaluating the results and then starting over again when you make the next set of code changes.
What about Agile Software, Continuous Delivery and Scripted Infrastructure?
Terms like agile software, continuous delivery and scripted infrastructure have become a part of the DevOps lexicon because they describe closely related processes or concepts.
Agile software or agile infrastructure refers to platforms such as containers, which facilitate DevOps by making it easy to integrate development and deployment processes. A cloud infrastructure that can quickly scale, or a data center that offers lots of virtual servers or containers for easy app portability and scalability, deliver agile infrastructure.
Continuous delivery is the type of app development process that is at the core of DevOps. As explained above, the ability to create, test and deploy apps on a continuous basis, without having to pause, is one of the main benefits of DevOps.
Scripted infrastructure kind of means the same thing as agile software. But whereas the latter term refers more to a concept than to actual tools, scripted infrastructure usually refers to actual platforms that let IT operations teams provision servers automatically at scale. In other words, they can script their infrastructure, treating "infrastructure as code." (That's another DevOps-related buzzword.) Tools like Puppet and Ansible are examples of scripted infrastructure solutions.
DevOps and the Channel
As more and more vendors shift to a DevOps-oriented mindset, and as consumers get used to continuous delivery of software, DevOps is bound to have ramifications for the channel. It will increase demand for integrated solutions that are less static and provide real-time updates.
It will encourage companies to cease operating as siloes that share only finished products with partner organizations; instead, development and production teams will have to collaborate more directly across partner companies.
And it will reduce barriers to interoperability to an unprecedented level, making partnerships even easier.