If you have tried deploying Sitecore to Azure or used Sitecore Azure Toolkit (Version 1.1 and above) for deploying any Sitecore modules, you should have used Sitecore Bootloader (Sitecore.Cloud.Integration.Bootload.wdp).

Following official documentation, it tells you how to set it up in ARM templates, and then everything else seems to be just magic. I don’t like magic in our world, because that means being blind when issues happen. After some googling, I couldn’t find any information regarding how this Bootloader works as well, so I decided to look inside myself. The other reason being that I want to use for the on-premise purpose, so I need to determine if there is going to be any cloud dependencies.

The version I am looking at is for Sitecore 8.2 update 4, and Sitecore Azure Toolkit version is Sitecore Azure Toolkit 1.1 rev. 170804.

Key findings:
  1. It’s a Web Deploy package with only IIS Website as deploy parameter.
  2. It register hooks which kicks off every minute to monitor following folders for transformations and module post steps (in Sitecore.Cloud.Integration.Bootload.PostStepsRunner.config in App_Config\Includes\zzz)
    1. \App_Data\Transforms
    2. \App_Data\poststeps
  3. \App_Data\Transforms expects Sitecore CargoPayload (official doc here) zip files or directories
    1. It installs them by copying InstallJob (in App_Data\tools folder) to temp folders (such as C:\WINDOWS\TEMP\SitecorePackageInstaller\xxxxxxxxxx) and invoking Sitecore.Cloud.Integration.Bootload.InstallJob.exe.
    2. In Sitecore.Cloud.Integration.Bootload.InstallJob.exe.config, references to ApplicationInsights and local logs can be found. For on-premise purpose, I removed all the ApplicationInsight references and changed the local logging path to C drive.
  4. \App_Data\poststeps expects files with method name in the first line and is invoked in Sitecore for module post steps just like how they are defined in standard Sitecore packages.
  5. In Sitecore.Cloud.Integration.Bootload.PostStepsRunner.config file, it also adds a processor Sitecore.Cloud.Integration.Bootload.PostStepsRunner.AbortRequestOnPackageMaintenance in httpRequestBegin pipeline to show offline page while the installation is in progress (it does something similar to ResponseRewrite instead of just copying app_offline.htm to root folder)
  6. Order of CargoPayload items being applied are
    1. CopyToWebsite
    2. IOActions
    3. Xdts

It does a very similar thing to SitecorePackageDeployer which is from TDS team for more streamline TDS package deployments, but Sitecore Bootload does not just Sitecore items, it also gives you abilities to add files and change files, updating configurations(XML) and variable injection in deployment time for any string.

In reality, it works pretty well, so far I have only had issues with WFFM module in CM instance where it stuck in post step with endless index summary status error which I haven’t figured out yet.