DevOps Part 2: Methods, Practices and Tools
In Part 1 of our DevOps series (Agile Operations: The Evolution of DevOps), we traced back this fairly recent approach to its roots, identifying the factors that led to its emergence and increasing popularity, and found that DevOps has a lot to do with the Agile movement.
In Part 2, we will look at some of the methods, practices and tools that are used to support the implementation of the DevOps values in practice.
Having identified DevOps as an extension to Agile, its “older brother” that it shares a basic philosophy with, we have discussed why bridging the gap between development and operations is necessary in today’s fast-paced development environment. DevOps helps align with Agile’s goal of prioritizing customer interest through the flexible development of software: continuously gathering feedback, and releasing early and often (and, of course, in consistently high quality).
The problem is the following: not only do development and operations have opposing goals in mind (building awesome features fast vs. making sure the system is always stable), there’s also the bottleneck of QA in between. DevOps releases this bottleneck by aligning the goals of everyone involved in the development of software, as well as making QA a common interest.
So how is this done in practice?
Achieving true DevOps
First and foremost, a generally accepted principle and keyword throughout the DevOps world is automation. To be more precise, as phrased by IBM, the call goes as follows: “Automate everything!”. As more and more applications rely on the cloud, rendering it practically irrelevant where the computing takes place physically, infrastructure should be a function of the code. In the cloud, automating builds, versioning, testing, configuration management, deployment, middleware, monitoring, ticketing systems, and provisioning are all possible, and should be executed automatically. This helps increase velocity.
Other key aspects (though somewhat related to automation) that IBM suggests DevOps practitioners should focus on are testing and versioning. The importance of testing cannot be emphasized enough: the Netflix dev team even went as far as developing a tool called the Chaos Monkey that randomly terminates processes in the system. Preparing for these random outages helps the team get ready for the unavoidable cases when the outage is not just a drill. The key to versioning is consistency, treating software as a complete entity – thus, versioning shouldn’t be restricted to certain elements and artifacts only; it should include everything from code through infrastructure definitions to test cases, and saved in a configuration management system.
For the sake of transparency, everything a multi-discipline team does should be planned, as well as tracked (monitored) and audited. The importance of this is pretty obvious: in such a fast-paced environment where new code may be released every few hours or days, it is simply a must to stay in control of processes. If everything your team does is associated with a requirement or work item, that helps make sure nothing is lost in the process, and that resources are used efficiently. On the other hand, monitoring and auditing supports accountability as well as the improvement of processes.
Finally, IBM’s last suggestion to those implementing DevOps: create a dashboard to allow all members of your team to stay on top of the entire process. This lets them simply overview measures about the progress (status), performance, quality and bottlenecks related to the development.
DevOps Practices & Tools
As OVUM’s 2011 Rainbow Map suggests, DevOps is best supported with release management and deployment automation tools. Continuous deployment also necessitates the use of test automation tools, platforms for version control, build automation, issue management and continuous integration. What’s more, all of this should be built on a powerful collaboration backbone to ensure the DevOps culture is supported.
DevOps teams use a plethora of tools for various purposes: from deployment, through configuration management, to test and build systems the several solutions used include Chef, Maven, JUnit, Jenkins, Ansible, Puppet to name just a few – and the list goes on. Since it’s a relatively recent and still evolving approach, there doesn’t seem to be a one-stop solution that includes all things DevOps. However, there are tools such as codeBeamer that help you integrate various solutions and ensure control over all processes. Some of our clients use codeBeamer to deploy as many as 9 releases per day; let’s see what functionality helps them achieve that!
- The most powerful benefit codeBeamer offers is that of collaboration: not only can it be easily integrated with other tools via REST API (there are use cases of Jenkins integration), it also includes advanced collaboration & communication functionality to support cooperation between team members.
- Release management is enhanced via codeBeamer’s Release Planner, letting you plan the development process using releases, sprints and subreleases, and assigning user artifacts (user stories, requirements, tasks etc) to releases.
- Complete baselining means your version control efforts are simplified: with baselining, all artifacts can be saved in a “snapshot” of the current version of the software. Various version control systems such as Git, Subversion and Mercurial are integrated in codeBeamer.
- As a vehicle to address customer feedback, codeBeamer’s issue management functionality (with bugs and change requests) lets you manage support & escalation, also aided by a customizable Kanban board.
- Your workflows (the pipeline of deployable work) are automatically visualized in codeBeamer, as per SAFe® guidelines.
- The Kanban board may be used as a dashboard, to oversee all processes – what’s more, flexible wiki plugins let you set up your own project dashboards to ensure efficient monitoring.
- QA & Testing is enhanced by test cases and test sets, all reusable through a library. Automated testing tools are easy to integrate with codeBeamer, and filters and reporting capabilities help you stay on top of test results.
- codeBeamer’s staging server support lets you deploy new projects to a test server before moving them to the production environment, further increasing the reliability of deployed versions.
- Our ALM solution also supports build and deploy automations, see one of our earlier blog posts for an example of that.
As a consequence, the implementation of the DevOps approach is supported both by codeBeamer’s end-to-end features, and its integrability with other tools. Thus, codeBeamer lets you manage all DevOps processes in one place, facilitating the closer alignment of development and operations, and letting you earn the benefits associated with DevOps.