A long time ago I worked as part of a helpdesk team at a hospital. The computers in the hospital ran a ton of different programs. At the time, we didn't have an automated deployment tool, so we installed each program manually. Trying to keep track of all those programs and their various installation instructions, license files, keys, and so on was very tricky and our documentation got messy very quickly.
So, I built a customized web app from scratch. It was written in PHP and stored data in a MySQL database. We called this app the Program Installer. It worked great for our needs at the time. In fact, I recently learned that it is still in use as of today. Looking back on it, I could have easily implemented a Wiki instead. But, I enjoyed building the app, and learned a ton throughout the process, so I have no regrets.
Fast forward to today. I have spent the past few months studying both cloud and devops technologies. I found myself wanting a fun project to work on that touched on both subjects. This web app came to mind. I haven't touched the code in years, it has just been sitting in a zip file in my Google Drive. So, I decided to modernize this app as fun personal project. I had multiple things that I wanted to accomplish with this project. I'll outline some of those below:
Update the code to modern standards: I originally coded the app using XHTML and some simple CSS. It desperately needed some updates. The new version is completely rewritten using HTML5 and has a responsive design thanks to using Bootstrap.
Host and run the app in Azure: I wanted to use Platform-as-a-Service (PaaS) in Azure. So, I'm hosting this in an Azure Web App instance. I chose this primarily because Azure Web Apps have a free tier, so I don't have to pay anything. There are a couple of drawbacks to the free tier, but for this particular project they are acceptable. I chose to use Windows as the OS for the web app. The choice to use Windows on the backend instead of Linux is key because it allows me to turn on an option called MySQL In-App. Without getting into too many details, this option is a very quick and easy way to implement MySQL for an Azure Web App. It does not require you to buy the separate Azure Database for MySQL service. In fact, the MySQL In-App feature just shares resources and pricing with your Azure Web App tier, which in my case is the free tier. So, that means the MySQL In-App feature is also free for me to use.
Use modern DevOps tools and methodologies:
As I thought about my process for rewriting and updating this app, I really wanted to incorporate modern DevOps into my workflow. I wanted to focus on and use the suite of tools in Azure DevOps Online.
Planning and Tracking work: I used Azure DevOps Boards with a customized Kanban board to plan and track my work.
Version Control System: I moved my code into a Git repository hosted on Azure DevOps Repos.
Development: I used Visual Studio Code with the Azure Repos extension so that I could do all of my coding, Git, and repository commands in one simple location. I also installed the Azure Pipelines extension which helped me when working with the YAML files needed by the Azure Pipeline processes mentioned below.
Continuous Integration & Continuous Deployment (CI/CD):
I created a Build Pipeline in Azure DevOps Pipelines to do automated builds of my app every time that code changes were pushed to the Git repo. Then, I used Azure DevOps Pipelines again to create a Release Pipeline that would take any new builds and automatically deploy them to my Azure Web App.
Check out the site here: https://nnazwaprograminstaller.azurewebsites.net
(it may take a few seconds to load due to me using the free tier)