Strategies for how to prepare for the implementation of DevOps into your enterprise.
“To become a DevOps expert, you must remain a DevOps student.”
DevOps is a workflow that is driving a quantum leap in software development lifecycle management. It is enjoying broad-based adoption by enterprises because it improves collaboration and communication between developers and operations teams, which enables faster changes in production.
But before we jump into the principles of DevOps—including infrastructure automation, continuous delivery and reliability engineering—let’s discuss why your organization should adopt DevOps.
In a variety of studies, DevOps has been shown to be effective in improving both engineering and business outcomes. The Puppet Labs’ State of DevOps 2015 survey revealed that teams using DevOps deployed changes 30 times more frequently with 200 times shorter lead times. And instead of those changes causing quality issues, the teams had 60 times fewer failures and recovered from issues 168 times faster than other organizations, which results in huge benefits for the business.
Ingredients of DevOps
The CAMS model created by DevOps pioneers John Willis and Damon Edwards is the foundation for DevOps and is based on four principles: culture, automation, measurement and sharing. All four ingredients are required for the successful implementation of DevOps:
Culture is an important ingredient when it comes to product development. IT organizations typically split staff into two teams: Development (the team responsible for developing features) and Operations (the team responsible for maintaining stability). These groups each have distinct cultures and often speak different technical languages. DevOps lowers the barriers between these groups and makes interaction seamless by changing their underlying behavior.
Automation. Most techies often think of DevOps solely as automation and use the term for any team working with Chef, Puppet or similar tools. The point of CAMS is to bring back balance into how we think about automated tooling. People and process precede tools. Automation is just an accelerator.
Measurement is one of the keys to a rational approach to software systems development. Metrics tell us what’s happening and whether the changes that we have made have improved anything. It’s important to monitor costs, revenue and even employee satisfaction in order to generate a holistic insight across the system. At Aricent, the metrics help our teams improve overall engagement and focus on the final goal.
Sharing ideas and problems is at the heart of collaboration and the heart of DevOps. Sharing is the feedback loop that helps establish a continuous improvement culture. Aricent follows a 360-degree feedback process that is transparent and extremely successful.
The DevOps Machinery
As described below and in Figure 1, there are three core practices in DevOps:
1. Infrastructure automation
2. Continuous integration and deployment
3. Reliability engineering
Figure 1. The DevOps Machinery
1. Infrastructure automation is the art of creating, modifying, scaling and destroying the system using code. For example, Amazon’s cloud formation templates allow you to specify instances, the network, load balancers and even security settings for your infrastructure in the JSON format. The YAML templates can be used in OpenStack and Azure Resource Manager templates that do much the same thing.
Tools: Ubuntu Juju, Chef, Puppet, Ansible, Salt, CFEngine.
Aricent used Terraform to huge advantage in one of our projects that works across multiple clouds. And we have developed proprietary software called AriCloud that interacts with multiple clouds, which is a powerful tool.
2. Continuous deployment is a combination of continuous integration (CI) and continuous delivery (CD). CI is the practice of automatically building and unit-testing the entire application on every source code check-in. CD is the practice of deploying every change to a production-like environment and performing automated integration and acceptance testing.
The 2016 State of DevOps report found that DevOps-enabled IT organizations could deploy on demand, while non-DevOps organizations took weeks.
The key areas in CI and CD are version control, CI systems, build and test, an artifact repository and deployment methods.
Version control is where you commit code changes. You can view the entire history of all changes ever made. GitHub is a great way to start.
Jenkins is open-source and popular in many organizations for CI and has a plethora of plugins that are very adaptable. Other options include CloudBees, GoCD, Bamboo and TeamCity. Aricent has used Jenkins in a variety of projects to build high-end pipelines successfully.
The selection of build tools is very straightforward. The team can use Maven, Gulp or Packer. Aricent has used Packer and I strongly recommend it because of its rich generic features.
Once the code has been built and tested, the artifacts can go to Artifactory or its open-source equivalent Nexus. Docker Hub or an internal Docker registry is what we use at Aricent in my current project and is very easy to set up and use.
Configuration management tools can be used for application deployment, or the team can write its own custom tooling. Rancher, Ansible, Puppet and Chef are some of the popular tools used. Last year, Aricent developed a deployment solution called Stack Tools, which can deploy an STP over OpenStack.
3. Reliability engineering includes availability and performance. You need to extract data and metrics from the production environment to implement this last practice.
A word of caution: do not over monitor. Once we were very rigorous in our monitoring and realized after the analysis that a full 40% of our system load was from our monitoring tools.
Logs are a great DevOps monitoring tool because while they can be consumed by an operations team, they can also be fed back to developers to provide meaningful feedback.
Suggested tools include Pingdom, Datadog, Netuitive, Ruxit, Librato, New Relic and AppDynamics. Open-source tools include StatsD, Ganglia, Graphite and Grafana. At Aricent, we use Nagios for this purpose.
DevOps is a go-to-market gamechanger for software development and production. Aricent’s experience applying DevOps is a testament to the validity of the survey results from Puppet’s State of DevOps and other sources regarding shorter lead teams, fewer failures and business value.
Of course, the devil is in the details. It’s important to embrace the methodology of CAMS, encourage collaboration between the development and production teams and embrace the three core DevOps practices of infrastructure automation, continuous integration and deployment and reliability engineering.
Embracing DevOps is a journey that requires leadership and commitment across the organization. There will be bumps in the road, but with time and dedication, the results from the transformation will deliver significant rewards.