There are many articles written on how to create ‘perfect’ continues deployment process with Sitecore, but in my 7 years of Sitecore experience I did not had opportunity to see many functional and complete implementations. The file deployment was never an issue, but synchronous deployment of content(items) and files was.

The main issue that make continues deployment difficult to implement in Sitecore is complexity around deploying items and files in order. I’ve seen different strategies, including deploying with Chief, IIS Web Deploy with Teamcity and TDS deploy, Octopus deployment and many other approaches. Most approached I have  seen came short providing full spectrum of deployment features needed for enterprise, but mainly ability to deploy with one button click and roll back if deployment failed.

I was fortunate enough to have opportunity to work on  continues integration prototype solutions. In this article, I’ll discuss continues deployment of TDS packages.

To have continuous deployment of Sitecore  items we opted to use TDS and UpdateInstallationWizard interface provided by Sitecore.

The process is very simple.  We used msbuild to compile and build TDS packages, the additional script used to collect packages  or package, in our case we used multiple project structure, where each project represented a site or feature, and sequentially deploy each package at a time through custom Service.

The service is designed to import TDS package and log the activity.

 

Now, we were able to install a package programatically, but one may ask: how would you install more than one package sequentially, without knowing that previous package was deployed successfully, especially if solution is based on multi project solution (like,  Habitat). For this prototype solution, we have created custom log processor. This script makes HTTP call to instantiate install of package and will wait until package installation is complete by checking logs.

 

This approach was created as a prototype and would require addition work to make it ‘production-ready’. For example,  I would like to avoid checking logs for installation completion and have installer method to return true  or false, but it is not organically possible now without extending “installer.ExecutePostInstallationInstructions” class.

I would love to hear if anyone have successfully extended installer.ExecutePostInstallationInstructions to return installation status or made it  in any other way.