I created an extension to warm up Sitecore website when hosting it on Azure and using Sitecore Bootloader module.
The warmup task itself is simple enough; many clients that I know are doing it via PowerShell scripts.
The task does similar things and in addition, to guarantee the stability of the DevOps automation. One thing that needs to be monitored, which is the installations of Sitecore Cargo Payload packages via Sitecore Bootloader module. Sitecore Bootloader module is part of Sitecore Azure Toolkit in case you are not familiar with it.
The warmup task uses Azure App Service Kudu API to check if the "App_Data\Transforms" folder is empty or not after it received a 200 response from the website. Only when the transforms folder is empty, which means the Bootloader installations are finished, then it marks the warmup as successful. Otherwise it waits and retries.
Another thing it does is when both above are successful; it forces to delete the "maintenance.lock" under "App_Data" folder to ensure the website is out of the maintenance mode. I know it may seem a bit thoughtless to force deleting it but if ever when "Transforms" folder is already empty, but Bootloader still doesn't remove the lock file, something is wrong with the installation process. The lock file needs to be removed regardless for devs to troubleshoot.
Won't repeat the details from the extension pages here, please find the URL below:
Extension Url: https://marketplace.visualstudio.com/items?itemName=Ke-Zhan.Cloud-Warmup-for-Sitecore
Moving forward, a few features that I want to add are:
  1. Allow adding of additional warmup URLs, not just the homepage.
  2. Allow more controls for all actions in the tasks.

Welcome any feedback, here or Azure Marketplace site. Happy DevOpsing!