We are set to release a large Sitecore-based system in a week. Presently the CI/CD process works by effectively republishing everything from a git
repository as the source (we use TDS for day-to-day development merging and update package generation). It does this by following these steps, implemented as Powershell scripts calling into SPE:
- Wipe both
master
andweb
databases (recursiveRemove-Item
); - Install two update packages (templates and content), using
UpdateInstallationWizard.aspx
; - Publish all items (recursive
Publish-Item
).
The whole process takes in the region of 2.5 hours to complete (we are using Sitecore 8.1, update 3). The problem is that once live, we cannot afford to have downtime--perhaps a little downtime (minutes) is acceptable, early in the morning, but hours is something that the business have said they are not willing to accept. Step 1 above essentially guarantees that the site will be down for a significant amount of time.
Our current "best" solution, given the short time we have is to simply do away with step 1 above, and just install the update packages (electing to overwrite items if they already exist). In theory, since typically we don't expect there to be many changes from deploy to deploy, we would at least be able to create the impression that the site is not down during the deploy.
The problem with our proposed short-term fix is that we can't be sure that an "overwite" won't break things (due to potential loss of item relationship integrity).
In following the "overwrite" approach, will the inter-item relationship integrity be maintained? I am aware of the fact that there will be orphan items and/or item graphs, but that should be okay, at least in the short term, since I am not expecting the stale items to influence the functionality of the site.