DevOps is, by nature, practices over technology. DevOps != Docker or Kubernetes or CICD. DevOps is a combination of people and process to continuously deliver value to the world with an application. This can't however, be accomplished without technology. A few years ago DevOps was very-much 80% process and 20% technology, but I believe the percentage is shifting to more of a 50/50. The world is seeing more and more demand for DevOps engineers, but when DevOps originally started, it wasn't a title or a job, it was a process. However, with time comes change, and that is what we are now seeing.
When I started to dive into automation and practicing DevOps with specific tooling, there were a few key players. At the time, Microsoft was not one of them. Microsoft was just starting to embrace the open source world, including the art and practice of DevOps. Since then Microsoft has went all-in and the tech giant has made some incredible DevOps tooling. I started focusing heavy on Microsoft environments and I love it. I went from AWS/Python/Ansible/Jenkins to Azure/PowerShell/ARM/Azure DevOps. My first programming language was PowerShell so being back in the saddle allowed me to do a full circle between all of the different types of tooling in both worlds. Today I want to share some of that tooling with you.
Azure is a cloud-based platform that allows you to host many environments with the power of Azure services. Much like AWS, Azure has SDKs, a great CLI (which we will talk about later), and plenty of other automation tools that allow you to easily spin up anything from VMs to networks to API-hosting services to serverless functions. Cloud based environments have changed the game. No longer do you have to wait for a server to arrive, configure a virtual environment on the server, and hope that everything gets spun up in a timely fashion.
ARM is a configuration management tool that allows you to perform software-defined-infrastructure. Much like Ansible and Terraform, ARM allows you to define what you want an environment to look like. With ARM, you can define parameters and variables to specify dynamically changing environments. The syntax is in JSON (key/value pairs) which allow you to define what infrastructure will look like. Let's have a look at the below example.
Below you see a key called subnetRef. After that you see a function called concat which concatenates any component you decide to put in a line of code. In this case I'm concatenating the variable vnetId with subnets and a parameter called subnetName.
"subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]"
After you define parameters and variables, you have resources. Resources are API calls to anything from VMs to storage accounts that allow you to define how you want infrastructure to look. For example, if you want to create a network interface, you would call the Microsoft.Network/networkInterfaces API. For more information on ARM, take a look at this article: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-functions
Next up there is AKS. AKS is an Azure-hosted Kubernetes service. This service allows you to tie Kubernetes micro-service infrastructure into Azure. Azure hosts the master node for you (where the Kubernetes API is) and allows you to manage workers. Instead of spinning up a Kubernetes environment on-prem, you can utilize AKS to easily spin up an environment. You can also spin up this environment in an automated fashion (With PowerShell, ARM, etc.)
Azure DevOps is a full-fledged DevOps tooling solution that is comprised of the following:
- A ticketing system which allows you to track progress in a Kanban board or even set up sprints.
- A wiki which allows you to document all processes and tips.
- A CI platform which allows you to create builds based on source code.
- A CD platform which allows you to ship a product in an automated fashion.
- Test plans which allow you to perform testing on source code.
- Azure Repos which is a distributed version control system (much like Github) to store code via source control.
Despite the name, Azure DevOps also works for on-premise deployments and even deploying to AWS. Because it is not tied to Azure, Azure DevOps is a great solution for multiple needs.
PowerShell is a programming/scripting language that gives you the ability to fully automate most workloads in both Windows and Linux from start to finish. The automation consists of anything from resources in Azure to resources in AWS to on-prem resources to virtualization resources in both ESXi and Hyper-V. You can even create scripts to push specific components into Docker, create Docker image with features like IIS, build a desktop app, and build a web app. With the introduction of PowerShell Core, the game has changed. Now you can run PowerShell on Linux, OSX, and Windows. It's fully cross-platform and allows you to have a one-stop-shop programming/scripting language.
.NET is a software framework that was developed by Microsoft. The .NET Framework also has an open source version called .NET Core. This too, much like PowerShell, can run cross-platform. The power behind PowerShell is .NET Framework. Many will use C# and the .NET Framework for building applications, but it can also be heavily incorporated into PowerShell. Within PowerShell you can add .NET assemblies, use namespaces, and even use the same
methods you can use in C# after initializing a class. .NET in PowerShell allows you to extend the language even further. With cmdlets in PowerShell like
New-Object, you can call upon .NET resources to incorporate any class or namespace you'd like.
There are many ways to manage resources in Azure. With the Azure Command-Line Interface (AZ CLI), you can work directly from the terminal. No longer do you need to click around to find resources throughout subscriptions. The Azure CLI gives you the ability to find and create any Azure resources that you need within Azure. The AZ CLI can also be wrapped within PowerShell or called within a CI/CD pipeline for any component function. You also have the ability to use the AZ CLI on Linux and OS X. Using the new Windows Terminal, the cloud shell is built in and allows you to use the AZ CLI too. As you can see, there are many places to incorporate AZ CLI.
Azure Repos is a distributed version control platform built into Azure DevOps to store source control. However, there is a new player in town. With the acquisition of GitHub, the Microsoft tooling belt now has arguably the most popular source control system in the world. Both source control systems allow you to have a centralized location to store source code and collaborate across teams for all projects that you are working on. The great thing about source control is no longer do you need to worry about where code is stored, who can see it, who can make changes, and who can work on it with you. Source control is the core to all development, DevOps, and anyone else who is writing code.
I'd like to point out the trend here. Microsoft is open-source friendly. There was a time that Microsoft certainly wasn't, but that has all changed. The Microsoft we're seeing today is a completely new and different company. With the tools and the changes that they've made, it's no doubt that the software legend will continue to be one of the top players in the open-source and DevOps game.