Introduction and Background
DevOps, DevOps, DevOps. I personally think DevOps is a requirement in most of the projects, involving software development. Yet, very little amount of people truly understand what DevOps has to offer, or what DevOps itself is. As to what DevOps is, I would leave that part to a future post, however, in this post, I will try to give you an overview of what DevOps has to offer and how you can kickstart your DevOps chains on Microsoft Azure. In this post, we will cover a couple of platform-level services offered by Microsoft and the Azure platform and see how we can build a complete toolchain—or better, how Microsoft Azure can help us build the DevOps pipeline on the services. Our services would include, but won't be limited to,
- Visual Studio Team Services
- Azure App Service
- Azure Application Insights
We will then move ahead and demonstrate how to kickstart an application of any framework or runtime, and how to configure the DevOps pipelines—including but not limited to the continuous integration, delivery, and deployment. The practical part of this post will cover what Azure has to offer for the teams to implement the DevOps, and the theoretical part will cover what DevOps is and why it matters!
I would appreciate if you are aware of DevOps, and what DevOps means to you and whether your teams require DevOps or not.
What is DevOps?
Let's quit the too typical of a definition for DevOps, stating that DevOps is a philosophy and a concept blending the tools and mindset of the software engineers. The problem with this is, where are the operations involved? Or to be precise, what degree of intervention is allowed for a software engineer to make in the operations? Let's redefine the concept, but first, the main concepts and characteristics of DevOps, that make it an important pillar in the modern software engineering are -
- Reduce organization silos.
- Accepting—if not embracing—failure.
- Implement gradual change.
- Leverage tools and automation.
- Measure everything.
I captured the list above from Google's Cloud Platform blog because I wanted to take this from someone who knows what DevOps is, and how to implement DevOps too, on a massive scale. Something similar can be found at Wikipedia, some at Microsoft and so on. The thing is these are the key elements of any DevOps practice. Google has an in-house job of Site Reliability Engineering. What most consider DevOps to be, is done by these SREs.
One more thing, instead of looking at DevOps in a graphical demonstration, how about we take another approach and present the DevOps as what it actually is; after all, we are talking about software engineers and developers, right!?
- // Apologies for C# style
- interface DevOps
- {
- /// <summary>
- /// Give ownership to the person(s) managing it. Let them take the wheel for a while.
- /// </summary>
- void GrantOwnership();
- /// <summary>
- /// Understand that an error has to be encountered, employ post-mortem reports, check and understand
- /// what went wrong, what could have been improved. Keep a limitation, figure out what defines
- /// your service as reliable (thus, the name Site Reliability Engineering).
- ///
- /// See, https -//en.wikipedia.org/wiki/Reliability_engineering.
- /// </summary>
- /// <param name="threshold">Threshold is the criteria to measure reliability; (1 - Probability of Failure).</param>
- void BearFailure(int threshold);
- /// <summary>
- /// SREs or DevOps also requires that you ship changes as you make them, minor patches are easier
- /// to be determined for bugs or crashes, than huge quarterly updates.
- ///
- /// Consider giving the control to the teams, but define a specific sprint when to publish
- /// the changes in production; A/B testing for instance.
- /// </summary>
- /// <param name="sprintNumber">Define when to push the changes in the stream.</param>
- void ReleaseProdution(int sprintNumber);
- /// <summary>
- /// DevOps, does container CI/CD. Configure those pipelines to automatically do the things
- /// an operations guy would have to jump in for.
- /// </summary>
- void ConfigurePipelines();
- /// <summary>
- /// Monitoring is the way for your teams to check and visualize how site is being used, what
- /// areas of app are lagging, which countries are facing latency issues and so on.
- /// </summary>
- void Watch();
- }
Do they make any sense to you? So now, we visualize the fact that DevOps is like a contract, an interface that your processes have to implement before consuming it. There is no simple way of doing this, as you can see most of the steps are for the processes; building, deployment, testing, and most of these are the cultural changes; that include but are not limited to giving ownership, accepting the failure rather getting frustrated.
Now let's stay on the topic and discuss how Azure provides us with the tools and services required to setup a DevOps environment.
Azure DevOps Project
Microsoft had tools and services, for developers to develop applications and platforms for operations teams to deploy and manage the applications. For developers, tools like TFS, VSTS enable an unmatched productivity, and for operations teams, services and platforms like Azure App Service and Azure Application Insights enable a richer experience to deploy and scale apps, and monitor them as needed with as much of depth and control as needed by the enterprise.
The Azure DevOps Project is a continuum of these two platforms; App Service and VSTS. Since the service is in the preview, we cannot say what other services might join hands (most notably, Azure Container Service), but currently, the blend of these services is what gives us Azure DevOps Project. Previously, the steps needed to create and startup a simple pipeline for DevOps CI/CD on Azure and VSTS would require,
- VSTS Account with Azure Service Endpoint configured.
- Azure App Service setup with proper Deployment Options setup
Then to take more control, you might would also need to create a separate monitoring package, such as Application Insights. Although Azure supports Resource Groups but even that would require you to configure this yourself.
Then, finally, once all of this was done, now you still did not have a dashboard! A dashboard is the one-place store to visualize everything about your product/project/application. You can check the current status of the app, deployment state, current usage of the app, failure to success ratio and much more. Now let's dig into the practical part of this port and deploy a new DevOps pipeline and practically understand what benefits can Azure provide us, in terms of having our DevOps pipeline setup on the cloud.
Be sure to also check out Azure DevOps Project documentation and product details on Azure.
Creating the project
Like every other service, Azure DevOps Project also has to be deployed on the cloud, you can easily create a new resource. Just head over the Azure Portal, and search for "devops", you will be provided with a DevOps Project resource. That is the resource we are currently interested in. The page will show you a complete cycle of the pipeline, the interesting thing in this resource creation is that Azure shows you the pages and fields relevant to the selections you make. We are going to create a basic ASP.NET Core app and run it on a Windows based App Service, but the workflow will provide you with all major runtimes, their frameworks, different deployment models and services to use, such as Kubernetes, Virtual machines, Windows or Linux based App Services and much more.














Join the conversation! Your thoughts help the community grow.