Saturday, April 15, 2017

Unicorn Serialization for SXA Projects

Sitecore Experience Accelerator (SXA) is organized in a way that aligns with Sitecore's Helix design principles and conventions. The following post describes how I structured a solution with Unicorn serialization to allow for low complexity management.

I'll try to explain as much as I can using pictures; everyone likes pictures.

Organizational Structure

The following names will be used to organize code and serialized content.
  • Feature
  • Foundation
  • Project
  • Website


Starting from the bottom I have a project using the naming convention [COMPANY].Website. This project contains code and configurations needed to bootstrap a website that would keep it in an operational state. Changes to Sitecore.config would appear as patch-configs in this project.

Let's have a look at this node expanded.



Example:
The configuration Company.Serialization.config contains all of the root items necessary for Unicorn to work in the solution. I've sanitized the example to use the generic name Company


Now let's have a quick look at some of the places where those items are in the Sitecore tree. The company name here is Concentra.


The configuration file is designed to create all of those root items. When a new developer joins, he/she will want to sync the Company.Website configuration first so all these root nodes appear.

Example:
The configuration Company.Project.DotCom.Serialization.Dev.config contains all of the descendant items that are project specific, such as site templates. This config contains the settings necessary for TransparentSync.

When you create a new tenant and site with the SXA wizard (powered by Sitecore PowerShell Extensions!) you will want to use the structure Tenant Folder > Tenant > Site (i.e. Concentra > DotCom > usa). I like this pattern because you future-proof the structure to support multiple companies.
You will want to use this configuration on your developer machine. Everything is tracked and transparently synced.

Example:
The configuration Company.Project.DotCom.Serialization.Cm.config contains the same as before, but disables TransparentSync and uses exclusions. You will want to use this configuration on Content Management environments, the primary reason is because the Home and Data trees should not be overwritten; Marketers will want to punch you if you do.

Putting it all together

So let's recap what we have.
  • Visual studio projects for Website, Project, Foundation, and Feature.
  • Unicorn serialization configurations that capture root nodes for the company (Website) and then other configurations for the tenant and site (Project). Foundation and Feature work the same way but have no information about the tenant/site.
  • Unicorn serialization configurations take into account what developers want to capture and own versus what should be deployed to other environments.
  • Unicorn files and configurations are removed before each deployment to ensure renamed or unused files are removed.
Here's a short video to add more detail.Thanks for watching!