What is DevOps?
DevOps is very much a buzzword and many do not fully understand what it really means. Let’s break it down: Dev and Ops – we are combining the application development and information technology operations into one process. We are moving away from a siloed approach and bringing teams together to deliver continuous delivery, continuous integration, agile planning, and monitoring of applications. It’s a continual feedback loop that works together delivery a faster and greater value to end users and the business.
Where to start with DevOps?
This is very much a people process as it is a technical process. I work with many organisations that have separate development and infrastructure teams and they do not always like to work together. Each team has their own set of tools and ways of doing things but forget that they are working to serve one common goal: the end user experience.
A review of the current deployment methodologies is a great place to start. Mapping out what your organisation is currently doing today, and where the team is looking to go. What is the current experience of deployments from the developer and infrastructure teams? Understanding the current pitfalls and issues can allow us to find the tools and solutions to alleviate the existing problems. Very often a dev team will request from the infra team resources to deploy onto. The infrastructure team is very much focused on security, server hardening and most importantly, available resources in their datacenter.
Both development teams and infrastructure teams are looking to achieve the same goals, but are approaching things in a different way. By using more automation, improving logging and reporting, and improving the release pipeline we can look to shorten the cycle time.
This is where Azure can help accelerate DevOps practices and adoption.
What tools are used in DevOps?
Every organisation has their own set of tools that are used by both the dev and infrastructure teams. What we need to look at is is there a better way? YES! Before joining Microsoft I will admittedly say that I looked to various open source tools. What changed for me? Learning more about Azure DevOps (formerly VSTS) as a cloud based solution to enable CI/CD and increase adoption of DevOps.
I sit with organisations that develop using various tools, in my role I show them how that can be accomplished using Azure DevOps. I think it’s important to understand that you can integrate and bring your own tools into Azure:
What key elements does an organisation need to consider for DevOps adoption?
There are some key fundamental elements that a developer team can adopt to ensure success in the DevOps process. But wait…not just devs, the operational teams as well can use these tools!
Source Code Repository – I work with many organisations that have an on-premises code repo, and the infrastructure team manage the hardware running this. Sometimes the security of the infrastructure is discussed, but developer teams don’t always think about versioning of their code. This is key to implement so that the various versions of code are checked and developers aren’t writing over each others code.
Common repos are GitHub or any other Git provider
Automation Tools – A build server will compile the code from the source code repo into an executable code base.
Common tools are Jenkins, Puppet, and Chef.
Test Automation – Once the build server has compiled the code we can then look at automated testing within our build pipeline to ensure we have a deploy-able build. Many organisations don’t have a defined testing process, this piece can really help provide an automated testing solution without much intervention.
Azure Pipelines is built into Azure DevOps and is a great solution to integrate your builds and releases using a testable cloud hosted platform. Many customers bring their release tools into Azure DevOps, allowing for an integration of capability and requiring less change from the organisation.
Monitoring – Many organisations rely on the infrastructure team to provide logging and monitoring events of their back-end systems, while the developer teams use various tools to monitor their apps and usage, crediting the siloed mentality. A monitoring and logging solution will allow an organisation to review not only the health of their production environments, but also use the rich data to capture performance and other issues that can be fed back to both the dev and operations team. We can design remediation into these deployments to increase accuracy in our code and infrastructure so that all relevant components are monitored and acted upon accordingly. Using monitoring to collect data and provide accurate telemetry data, enabling real time alerting and usage analytics, provides an immediate feedback mechanism to both teams.
Monitoring can track usage and enable continuous deployment, automating the entire process of your CI/CD tests. Quality Gates can be enabled in various products that allow for measurable data, feeding back into the organisations key health and performance metrics (KPIs).
All of the above feed into the DevOps process, now someone would assume the above tools are only for developers…but wait, there’s more!
Infrastructure as Code (IaC)
This is a key DevOps practice that relies heavily on what operational teams are able to support. Traditionally, a development team ask for an environment, the ops team will build them what is available, many times being a separate system that does not follow the exact configuration of production. Administration and maintenance of infrastructure is usually quite a manual process and creates discrepancies among environments, not providing a ‘like for like’ test, dev, UAT, etc testing platform. We refer to this as ‘environment drift’. Finding a way to make infrastructure repeatable, increases stability and allows teams to work at scale.
Providing a key DevOps practice used in conjunction with continuous delivery. For a DevOps team to be able to deliver a well-documented and constructed environment, provides the dev team with a platform in which to integrate their CI/CD processes more readily, which leads to more accurate testing and end user experience.
There are various ways to adopt IaC, it can be a big leap for the infrastructure team, which is where I can help! Many customers have embraced the cloud in some way or another, while many are very much focused on a hybrid model. Azure Resource Manager (ARM) allows you to deploy, manage and monitor all of your resources in Azure, allowing for repeatable design and quicker time to deploy.
For customers in a more hybrid model, I lead with Hashicorp’s Terraform….why? It can deploy to Azure and VMware back on premises, so it’s one tool for both dev and infrastructure teams to learn and deploy. Terraform can be deployed from Visual Studio Code and used hand in hand with Azure DevOps. Both the infrastructure and development teams can work together to plan their deployments using products like Azure Boards.
One of my favorite topics these days is Infrastructure as Code. Working with operational teams to deploy scalable and agile deployments allows them to produce an environment that plays a major role in application development. An infrastructure team can now rebuild/change and track changes to an infrastructure with ease. The biggest advantage I see using Terraform is that it allows to you to plan your changes before you apply them, allowing for faster changes and documented versioning. The infrastructure team can integrate this process into the full DevOps life cycle!
Adopting DevOps
Now it’s time to go out and review the current deployment process in the organisation, elect your DevOps teams and get started!
Getting the DevOps process right the first time is never achieved, it is an iterative process. By being able to monitor and track your KPIs (or user behavior), you will learn to optimize and plan a remediation to your process. Providing the best solution to your end users is the ultimate goal, keeping the DevOps mindset as a process that is evolving will get you there.