Learn Azure Pipelines Project
Here it is, the start of the Azure Pipeline project series that I’m going to publish for others to follow along. This was a college assignment which I particularly enjoyed and found useful in the new age of DevOps. I found it so good I felt compelled to share it. It is hosted on Azure and can be done entirely on the free tier, for my college project I used some paid features but I’ve rolled those back now and it is still as good as ever. This series will walk through all the steps to get your own CI/CD pipeline up and running on Azure for free. This is a great opportunity to get hands on and learn the fiddly bits yourself, in may large organizations these details are kept behind the curtain and you miss out on knowing how they actually work (it is easier than you probably expected). So let’s jump in with an opening post setting out the App and the Ask, I will follow up with the first steps post shortly.
DevOps CI/CD Pipeline Learning Project
Your blood pressure is calculated from your Systolic and Diastolic readings. Given these two numbers, your blood pressure is classified as Low, Ideal, Pre-High and High.
Joining a team with a mostly complete ASP.NET Core web application, the challenge is to design and configure a Continuous Integration and Continuous Delivery pipeline in the Azure DevOps / Azure Public Cloud.
You are tasked with getting the project into a better DevOps posture. They need a CI/CD pipeline that will meet the following:
- Continuous Integration - The application is built and tested on each push of code to the repository. [unit tests and code quality/static analysis].
- Continuous Delivery - The application is deployed and undergoes automate User Acceptance testing [Selenium and performance tests].
- Expected behavior - a developer pushes new code and so long as all tests pass the update is published to the Production WebApp Url.
- If the code quality is too low, or the Web App functionality (UAT tests) fail then the build should fail and not be deployed to Production.
- Optionally – continue development of the application and add a new feature of your own creation (include tests).
High Level Tasks (not in any order)
- Get Visual Studio Community edition / [Macs].
- The application is incomplete and will not build. Write the missing code in line with the specification of the chart above, and be able to develop locally (Ctrl-F5 to launch locally). Review the code in the BMI calculator app for help.
- The application has no unit tests, add a test project and write some tests. Test locally with Test Explorer.
- Stand up an initial build pipeline to pull the code from the repo.
- Stand up a release pipeline to connect to Azure and publish the app as a Azure Web App. You can run up to 10 Web Apps for free so it should not cost you anything to run a Dev and Prod web app.
- Write some Selenium tests to imitate user behavior, (enter data – check for correct output).
- Fork your own copy from https://github.com/ctolan/bp to Azure Repos or GitHub (both can be a source for a Azure Pipeline).
- Improve your pipeline, be sure Production is not affected by a bad development deployment.
- Consider a load balancer in front of multiple instances of the App for High Availability. Can your app survive a region outage?
- Improve code quality – get a SonarCloud.io account and configure your project for analysis (free if project is public). Fix or exclude the issues found.
- Configure continuous quality testing by configuring a quality gate in the build pipeline to break the build if not good enough.
- Set up a Google Analytics account and add the Web App for insight into customer usage and demographics. Do you need a notification about cookies now (GDPR)?
- Ensure necessary test files from build are packaged with the “drop”.
- You can add script (PowerShell) tasks that will print out (Write-host) “dir” to the logs.
- You can use copy, zip and extract tasks if needed.
This is a task I was assigned on a college course and felt it would be valuable to share. This took many days and nights of work it is not something you will complete start to finish in one sitting it is a project that you will develop over a few weeks of work as you learn as you go.
This is an interesting personal challenge that anyone can undertake to explore and experiment current DevOps tools and practices. When written it was possible to do all of this on the free tier of Azure, but this may change.