Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Rob Habraken | Technical Manager, Consultant & Sitecore MVP
Sitecore 8.2 on Azure Web Apps
Familiarity of
Windows
Built on .NET, Sitecore uses
the technology that your IT
department already knows.
Infinite scalabi...
Virtual Machines Cloud Services Web Apps
Azure hosting options
Control Support of legacy apps Ease of management Agility
•...
Delivery
ServersVisitors
Authors
Management
Servers
Content Management
Databases
Health
Monitoring
Content Delivery
Databa...
• ARM (Azure Resource Manager) templates are an
Azure standard using JSON
• Delivered by Sitecore as a starting point for ...
The road to the ultimate Continuous Deployment setup
• What do we need more for a good CI/CD setup?
• How to edit and extend the provided ARM templates?
• What are the pitfall...
Streamlining your Cloud deployments
• Clean install per deployment, based on vanilla Sitecore install
• Keep database content and only deploy new / changed it...
Sitecore gives you handy ARM templates for the different sizings,
but they’re a head start only; you will run into some is...
• Roll out your infrastructure first, like resource groups, databases,
hosting plans and slots
• Then, provision a vanilla...
Web roles
Health
Monitoring
Databases
SearchCollection
Database
Session
State
1. Provision infrastructure only:
Empty Web ...
Web roles
Health
Monitoring
Databases
SearchCollection
Database
Session
State
2. Provision vanilla Sitecore:
Sitecore into...
Web roles
Health
Monitoring
Databases
SearchCollection
Database
Session
State
3. Swap (just to demo):
Swap
Web roles
Health
Monitoring
Databases
SearchCollection
Database
Session
State
3. Re-provision without database:
Wipes slot...
Web roles
Health
Monitoring
Databases
SearchCollection
Database
Session
State
4. Deploy your own solution:
Customizing ARM templates
• Split infra and msdeploy parts, so we can re-provision!
• Use output parameters to stitch templates together
• Add stagi...
• ARM splitting
• output parameters
• staging slots
• The Sitecore Web Deploy Packages you can download from
Sitecore contain vanilla databases, but you don’t want them to
ov...
• Get the parameters.xml file out of the SCWDP; it contains all
the info about the required parameters to deploy that pack...
msdeploy -verb:sync -source:package="D:DataInetpubazurexp0-singleSitecore 8.2 rev. 161221_single.scwdp.zip" -
dest:package...
• The real config values don’t have to be in the target package
• Actually, you don’t want them in there:
• A package shou...
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[string]$PackagePath,
[Parameter(Mandatory=$True)]
[string]$ParamFil...
Combining PS, ARM & VSTS
• Re-provision using msdeploy ARM and db-less SCWDP
• Deploy to the staging slot using VSTS (for example)
• Test & warm up...
• Do you have custom role specific configuration
(CM/CD/REP/PRC)?
• Don’t transform them in your Solution, use cargo paylo...
What could go wrong
• Use shared access signatures (SAS) to access your SCWDPs
• You are not allowed to publicly expose Sitecore software down...
• Set your
container
access to
private
• Generate a
SAS token and
add it to your
package URL
• Add “.scm” to resource URL or access via Portal
• Browse through files, view or edit them (debugging only!)
• Execute Po...
• EventQueue issue: the staging slot creates an extra CM role,
which could introduce concurrency issues with your producti...
• Sitecore will release a new set of ARM templates shortly,
containing a few aspects we’ve seen today, and more:
• Nested ...
• Blog on Azure Cloud Services – deprecated!
http://sitecore.robhabraken.nl/index.php/2229/sitecore-azure/
• First blog of...
• Download my demo scripts & ARM templates
https://github.com/robhabraken/Sitecore-Azure-Scripts
• A blog post, including ...
Blue Green Sitecore Deployments on Azure
Blue Green Sitecore Deployments on Azure
Blue Green Sitecore Deployments on Azure
Blue Green Sitecore Deployments on Azure
Upcoming SlideShare
Loading in …5
×

Blue Green Sitecore Deployments on Azure

4,367 views

Published on

The sildes of my presentation on the Sitecore User Group Jordan meetup on April 24th 2017 and the Sitecore User Group Belarus meetup on April 27th, presenting and demoing the blue green provisioning of Sitecore into Azure using Azure Web Apps. Note that these slides do not contain the demo itself. For the demo, view the recording of the presentation or read my blog post, both accessable via https://www.robhabraken.nl

Published in: Software
  • Be the first to comment

Blue Green Sitecore Deployments on Azure

  1. 1. Rob Habraken | Technical Manager, Consultant & Sitecore MVP
  2. 2. Sitecore 8.2 on Azure Web Apps
  3. 3. Familiarity of Windows Built on .NET, Sitecore uses the technology that your IT department already knows. Infinite scalability Easily scales up and down as demand changes.* Rapidly deploy Sitecore on Azure without worrying IT. Speed to market The only enterprise- grade cloud Microsoft Azure ensures that Sitecore® Experience Database™ is secure. Always on Never miss a beat; always be there for your customers. Interoperability Integrates seamlessly with your existing back-end systems and marketing investments. Accident protection Reliable and redundant copies of your data and automatic failover protection. Pay-as-you-go Only pay for the power and capacity you’re using.* *Customers will need to ensure the proper number of content delivery servers from Sitecore to meet scaling requirements.
  4. 4. Virtual Machines Cloud Services Web Apps Azure hosting options Control Support of legacy apps Ease of management Agility • Web Apps is the new PaaS standard with more agility & easier to manage • Web Apps were previously marketed as a SaaS solution, but is now considered to be PaaS • Sitecore is using additional SaaS services to complete the installation Azure Module Sitecore 8.2-1
  5. 5. Delivery ServersVisitors Authors Management Servers Content Management Databases Health Monitoring Content Delivery Databases Processing Servers Search Collection Database Session State Reporting Database Reporting Servers
  6. 6. • ARM (Azure Resource Manager) templates are an Azure standard using JSON • Delivered by Sitecore as a starting point for your own custom provisioning • Enables you to define one or more Azure resources including dependencies between deployed resources • Can be used for initial provision or as continuous deployment • Use Web Deploy and DACPAC packages to setup site & databases
  7. 7. The road to the ultimate Continuous Deployment setup
  8. 8. • What do we need more for a good CI/CD setup? • How to edit and extend the provided ARM templates? • What are the pitfalls and black holes in blue / green provisioning?
  9. 9. Streamlining your Cloud deployments
  10. 10. • Clean install per deployment, based on vanilla Sitecore install • Keep database content and only deploy new / changed items • Don’t disturb live site with deployment process or new content • Option to rollback deployment upon failure • Repeatable process, fully automated
  11. 11. Sitecore gives you handy ARM templates for the different sizings, but they’re a head start only; you will run into some issues • You cannot re-provision an environment, having to deploy over an existing web app, being unable to remove files • It doesn’t provision staging slots to deploy while keeping your current version up & running • It doesn’t tell you how to re-provision without overwriting your database with content you want to keep
  12. 12. • Roll out your infrastructure first, like resource groups, databases, hosting plans and slots • Then, provision a vanilla Sitecore install into your staging slot (this step includes installing databases and vanilla content) • Then, create a repeatable re-provisioning step, provisioning a vanilla Sitecore install into your staging slot, without databases! (this actually wipes your staging slot each time your provision) • Deploy your own solution over the staging slot & swap when ready
  13. 13. Web roles Health Monitoring Databases SearchCollection Database Session State 1. Provision infrastructure only: Empty Web App, empty databases
  14. 14. Web roles Health Monitoring Databases SearchCollection Database Session State 2. Provision vanilla Sitecore: Sitecore into staging slot, default content
  15. 15. Web roles Health Monitoring Databases SearchCollection Database Session State 3. Swap (just to demo): Swap
  16. 16. Web roles Health Monitoring Databases SearchCollection Database Session State 3. Re-provision without database: Wipes slot, installs new files, keeping content
  17. 17. Web roles Health Monitoring Databases SearchCollection Database Session State 4. Deploy your own solution:
  18. 18. Customizing ARM templates
  19. 19. • Split infra and msdeploy parts, so we can re-provision! • Use output parameters to stitch templates together • Add staging slots (default provisioning & deployment target) • Upgrade minimum SKU configuration to support slots • Add a databaseless SCWDP and provision for re-provisioning
  20. 20. • ARM splitting • output parameters • staging slots
  21. 21. • The Sitecore Web Deploy Packages you can download from Sitecore contain vanilla databases, but you don’t want them to overwrite your own Sitecore content while re-provisioning • You have to strip the databases from the different SCWDPs • You can do that using msdeploy, deploying from one zip archive (SCWDP) to another, using the skip dbFullSQL & skip dbDacFx parameters!
  22. 22. • Get the parameters.xml file out of the SCWDP; it contains all the info about the required parameters to deploy that package • Invoke msdeploy with the -skip:objectName=dbFullSql and -skip:objectName=dbDacFx parameters • Add all additional parameters required by the specific SCWDP
  23. 23. msdeploy -verb:sync -source:package="D:DataInetpubazurexp0-singleSitecore 8.2 rev. 161221_single.scwdp.zip" - dest:package="D:DataInetpubazurexp0-singleSitecore 8.2 rev. 161221_single-nodb.scwdp.zip" -declareparamfile="D:DataInetpubazurexp0- singleparameters.xml" -skip:objectName=dbFullSql -skip:objectName=dbDacFx -setparam:"Sitecore Admin New Password"=“giLvgjMXG0D9CuKYKctA" - setparam:"Core DB User Name"="single-core-sitecore-msdeploy-user" -setparam:"Core DB Password"="TWsxzkGQ5VrPT@7znJDe9NkFFtG" -setparam:"Master DB User Name"="single-master-sitecore-msdeploy-user" -setparam:"Master DB Password"="xgMR7p6dmLYdL@7znJDe9NkFFtG" -setparam:"Web DB User Name"="single-web- sitecore-msdeploy-user" -setparam:"Web DB Password"="B3j0tnNXVBoS6@7znJDe9NkFFtG" -setparam:"Reporting DB User Name"="single-reporting-sitecore- msdeploy-user" -setparam:"Reporting DB Password"="0dURnXD5T93f@7znJDe9NkFFtG" -setparam:"Core Admin Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-sql.database.windows.net,1433;Initial Catalog=azure-rg-core-db;User Id=xp0- single-sql;Password=a6CmAkgOyY236ctkzsNx;" -setparam:"Core Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg- sql.database.windows.net,1433;Initial Catalog=azure-rg-core-db;User Id=single-core-sitecore-msdeploy-user;Password=TWsxzkGQ5VrPT@7znJDe9NkFFtG;" - setparam:"Master Admin Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-sql.database.windows.net,1433;Initial Catalog=azure-rg-master-db;User Id=xp0-single-sql;Password=a6CmAkgOyY236ctkzsNx;" -setparam:"Master Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-sql.database.windows.net,1433;Initial Catalog=azure-rg-master-db;User Id=single-master-sitecore-msdeploy-user;Password=xgMR7p6dmLYdL@7znJDe9NkFFtG;" -setparam:"Web Admin Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-web-sql.database.windows.net,1433;Initial Catalog=azure-rg-web-db;User Id=xp0- single-sql;Password=a6CmAkgOyY236ctkzsNx;" -setparam:"Web Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-web- sql.database.windows.net,1433;Initial Catalog=azure-rg-web-db;User Id=single-web-sitecore-msdeploy-user;Password=B3j0tnNXVBoS6@7znJDe9NkFFtG;" - setparam:"Reporting Admin Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-sql.database.windows.net,1433;Initial Catalog=azure-rg-reporting-db;User Id=xp0-single-sql;Password=a6CmAkgOyY236ctkzsNx;" -setparam:"Reporting Connection String"="Encrypt=True;TrustServerCertificate=False;Data Source=azure-rg-sql.database.windows.net,1433;Initial Catalog=azure-rg-reporting-db;User Id=single-reporting-sitecore-msdeploy-user;Password=0dURnXD5T93f@7znJDe9NkFFtG;" -setparam:"Analytics Connection String"="mongodb://mlab- azure:mM8kY7jD6JkDUykx6D2y@ds123456.mlab.com:12345/analytics" -setparam:"Tracking Live Connection String"="mongodb://mlab- azure:mM8kY7jD6JkDUykx6D2y@ds123456.mlab.com:12345/tracking-live" -setparam:"Tracking History Connection String"="mongodb://mlab- azure:mM8kY7jD6JkDUykx6D2y@ds123456.mlab.com:12345/analytics-history" -setparam:"Tracking Contact Connection String"="mongodb://mlab- azure:mM8kY7jD6JkDUykx6D2y@ds123456.mlab.com:12345/tracking-contact" -setparam:"Cloud Search Connection String"="serviceUrl=https://azure-rg- as.search.windows.net;apiVersion=2015-02-28;apiKey=A6836C6EBBA68675D558336C6EBBA686" -setparam:"Application Insights Instrumentation Key"="ecc59b93- 57eb-4c89-1264-945b2ae914f6" -setparam:"Application Insights Role"="Single" -setparam:"License XML"="." -setparam:"IP Security Client IP"="0.0.0.0" - setparam:"IP Security Client IP Mask"="0.0.0.0" …and it would be different for each environment & instance role! PS: these are all fake credentials, of course ;-)
  24. 24. • The real config values don’t have to be in the target package • Actually, you don’t want them in there: • A package should be re-usable among environment • For security reasons, it shouldn’t contain the actual credentials • They would be overwritten by the ARM provisioning anyway • Use PowerShell to automate the creation and execution of the command, based on the parameters.xml file
  25. 25. [CmdletBinding()] Param( [Parameter(Mandatory=$True)] [string]$PackagePath, [Parameter(Mandatory=$True)] [string]$ParamFile, [Parameter(Mandatory=$False)] [string]$PackageDestinationPath = $($PackagePath).Replace(".scwdp.zip", "-nodb.scwdp.zip") ) $msdeploy = "C:Program FilesIISMicrosoft Web Deploy V3msdeploy.exe" $verb = "-verb:sync" $source = "-source:package=`"$PackagePath`"" $destination = "-dest:package=`"$($PackageDestinationPath)`"" $declareParamFile = "-declareparamfile=`"$($ParamFile)`"" $skipDbFullSQL = "-skip:objectName=dbFullSql" $skipDbDacFx = "-skip:objectName=dbDacFx" # read parameter file [xml]$paramfile_content = Get-Content -Path $ParamFile $paramfile_paramnames = $paramfile_content.parameters.parameter.name $params = "" foreach($paramname in $paramfile_paramnames){ $tmpvalue = "tmpvalue" if($paramname -eq "License Xml"){ $tmpvalue = "LicenseContent"} if($paramname -eq "IP Security Client IP"){ $tmpvalue = "0.0.0.0"} if($paramname -eq "IP Security Client IP Mask"){ $tmpvalue = "0.0.0.0"} $params = "$params -setParam:`"$paramname`"=`"$tmpvalue`"" } # create new package Invoke-Expression "& '$msdeploy' --% $verb $source $destination $declareParamFile $skipDbFullSQL $skipDbDacFx $params"
  26. 26. Combining PS, ARM & VSTS
  27. 27. • Re-provision using msdeploy ARM and db-less SCWDP • Deploy to the staging slot using VSTS (for example) • Test & warm up your new site • Swap slots
  28. 28. • Do you have custom role specific configuration (CM/CD/REP/PRC)? • Don’t transform them in your Solution, use cargo payloads! • For more info on this topic, check out this article by Bas Lijten: http://blog.baslijten.com/sitecore-on-azure-create-custom-web- deploy-packages-using-the-sitecore-azure-toolkit/
  29. 29. What could go wrong
  30. 30. • Use shared access signatures (SAS) to access your SCWDPs • You are not allowed to publicly expose Sitecore software downloads • You do not want to share your base install, possibly including configs • Add IP security to all testing and acceptance environments • You can copy IP security setup from the XP CM role • I have added this to the XP0-single templates, using it for test mainly • Use Azure Key Vault to store your keys and passwords
  31. 31. • Set your container access to private • Generate a SAS token and add it to your package URL
  32. 32. • Add “.scm” to resource URL or access via Portal • Browse through files, view or edit them (debugging only!) • Execute PowerShell • View Processes • Etc.
  33. 33. • EventQueue issue: the staging slot creates an extra CM role, which could introduce concurrency issues with your production slot CM • Indexing: if you do blue green deployments using an extra web database, please take in mind that your Azure Search already updates your indexes based on the new master content! • Content stop: if you want to avoid conflicts, content editors should not publish during deployments (although than can continue working on the master database); if you want to deploy continuously, this can be a huge disturbance for editors
  34. 34. • Sitecore will release a new set of ARM templates shortly, containing a few aspects we’ve seen today, and more: • Nested templates • Splitting infra & application • Module support (add-ons) • Staging and databaseless re-provisioning? Check my repository • Always use them as a boilerplate to create your own templates!
  35. 35. • Blog on Azure Cloud Services – deprecated! http://sitecore.robhabraken.nl/index.php/2229/sitecore-azure/ • First blog of my series on Azure Web Apps http://sitecore.robhabraken.nl/index.php/2407/an-introduction-to-sitecore-on-azure-web-apps/ • An comprehensive introduction to Sitecore on Azure Web Apps https://www.robhabraken.nl/index.php/2622/sitecore-8-2-1-on-azure-web-apps/ • Automated scaling using PowerShell https://www.robhabraken.nl/index.php/2658/saving-costs-by-scaling-down/ • One of the issues of staging on a shared master database https://www.robhabraken.nl/index.php/2683/the-staging-slot-eventqueue-issue/
  36. 36. • Download my demo scripts & ARM templates https://github.com/robhabraken/Sitecore-Azure-Scripts • A blog post, including recordings of this session, will follow shortly on my Sitecore blog https://www.robhabraken.nl/

×