Sitecore Helix Examples, Dockers… Now in #Sitecore 9.3


Dear fellow Sitecorians,
For some days ago Sitecore released their new version Sitecore 9.3 and the documentation is OUTSTANDING as always, check it out at https://doc.sitecore.com/developers/93/index.html 😘

There are are so many wonderful things in this release:
Sitecore Horizon – Horizon is the next-generation editor in Sitecore Experience Platform
SXA 9.3
Sitecore blob storage
Automated Personalisation (Sitecore AI)
….

Today we will do a follow up on the previous post – #Sitecore Helix Examples, Dockers, Sitecore Helix Visual Studio Templates, VS2019 project type, Sitecore TDS and Libman – All together in harmony
We will upgrade the solution to Sitecore 9.3

As always we will use wonderful docker images from Sitecore Docker images.
Start following the README in my forked repository from Helix.Examples

There have been some changes in how to run the Sitecore 9.3 Docker containers:

Optional ENTRYPOINT scripts
For IIS based images (such as the roles cm, standalone and cd) we now have a few scripts that can be used as ENTRYPOINT for development and production use.

Using these ENTRYPOINT scripts enables you to observe Sitecore log entries in the STDOUT of containers in the foreground or by using commands such as docker container logs or docker container attach.

C:\tools\entrypoints\iis\Production.ps1 features:

Adds an UDP appender to all default log4net loggers.
Starts ServiceMonitor.exe in the background.
Starts filebeat.exe in the foreground and outputting to STDOUT.
FileBeat inputs configured:
IIS access logs, disabled by default, can be switched using environment variable: ENTRYPOINT_STDOUT_IIS_ACCESS_LOG_ENABLED=true
IIS error logs, disabled by default, can be switched using environment variable: ENTRYPOINT_STDOUT_IIS_ERROR_LOG_ENABLED=true
Sitecore logs, enabled by default, can be switched using environment variable: ENTRYPOINT_STDOUT_SITECORE_LOG_ENABLED=false
C:\tools\entrypoints\iis\Development.ps1 features:

Same as Production.ps1.
Starts the Visual Studio Remote Debugger msvsmon.exe in the background if the Visual Studio Remote Debugger directory is mounted into C:\remote_debugger.
Starts the Watch-Directory.ps1 script in the background if a directory is mounted into C:\src.
See the cm and cd service in windows/tests/9.x.x/docker-compose.xm.yml for configuration examples.

Install and run Sitecore 9.3

Prerequisites – Generate Sitecore Docker Images:

Go to https://github.com/Sitecore/docker-images and clone or copy solution.
Follow instructions and run the Build.ps1. If you just want to have the images locally(not pushing to any registry), change the -PushMode to Never

Here is an example of a Build.ps1 script:

[CmdletBinding(SupportsShouldProcess = $true)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidUsingPlainTextForPassword", "SitecorePassword")]
param(
    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [string]$InstallSourcePath = (Join-Path $PSScriptRoot "\packages")
    ,
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$SitecoreUsername
    ,
    [Parameter(Mandatory = $true)]
    [ValidateNotNullOrEmpty()]
    [string]$SitecorePassword
)

$ErrorActionPreference = "STOP"
$ProgressPreference = "SilentlyContinue"


$azureRepository = "sitecoreimages.azurecr.io"
$azureUserName = "ZZZZZZZZZ"
$azurePassword = "XXXXXXXXX"

# Login
docker login $azureRepository -u $azureUserName -p $azurePassword


# load module
Import-Module (Join-Path $PSScriptRoot "\modules\SitecoreImageBuilder") -Force

$baseTags = "*:9.3.0*1903"

# restore any missing packages
SitecoreImageBuilder\Invoke-PackageRestore `
    -Path (Join-Path $PSScriptRoot "\windows") `
    -Destination $InstallSourcePath `
    -SitecoreUsername $SitecoreUsername `
    -SitecorePassword $SitecorePassword `
    -Tags $baseTags `
    -WhatIf:$WhatIfPreference

# start the build
SitecoreImageBuilder\Invoke-Build `
    -Path (Join-Path $PSScriptRoot "\windows") `
    -InstallSourcePath $InstallSourcePath `
    -Registry $azureRepository `
    -Tags $baseTags `
    -PushMode "WhenChanged" # optional (default "WhenChanged"), can also be "Never" or "Always".
    -WhatIf:$WhatIfPreference

Prerequisites – Install Dockers:

Step 1. Verify .env file

Verify and check the ".env variables". They are needed for the docker-compose file. (The .env file is located in the Docker folder)

REGISTRY=sitecoreimages.azurecr.io/
WINDOWSSERVERCORE_VERSION=1903
NANOSERVER_VERSION=1903
SITECORE_VERSION=9.3.0
SITECORE_LICENSE=
REMOTEDEBUGGER_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Remote Debugger
SQL_SA_PASSWORD=8Tombs-Given-Clock#-arming-Alva-debut-Spine-monica-Normal-Ted-About1-chard-Easily-granddad-5Context!
TELERIK_ENCRYPTION_KEY=qspJhcSmT5VQSfbZadFfzhCK6Ud7uRoS42Qcm8UofvVLiXciUBcUeZELsTo8KD9o6KderQr9Z8uZ9CHisFJNRz46WTZ5qCRufRFt

Step 2. Run script:

Open Windows Powershell. Run it as an administrator.
Navigate to docker in the windows powershell window (e.g C:\Projects\Helix.Examples\examples\helix-basic-tds-with-a-twist\Docker) and run script:

.\Setup-Run-Sitecore-9.3.ps1 "docker-compose.9.3.0.xp.yml"  -Path C:\license\license.xml

It will download images(if needed) from the repository, compose/setup a Sitecore instance.
We will not copy files to the wwwroot(in data/cm/), we will go for the black-box approach(recommended).

Setup-Run-Sitecore-9.3.ps1:

param(
    [Parameter(Mandatory = $true)]
    [string]$ComposeFile
    ,
    [Parameter(Mandatory = $true)]
    [ValidateScript( { Test-Path $_ -PathType "Leaf" })]
    [string]$PathToLicense
)

function CreateWWWrootFoldersInCMAndCD() 
{

  $cmPath = Join-Path $PSScriptRoot "\data\cm\wwwroot"
  $cdPath = Join-Path $PSScriptRoot "\data\cd\wwwroot"

  if (!(Test-Path $cmPath) -or !(Test-Path $cdPath)) {
    # Remove docker data path from Windows Defender
    Add-MpPreference -ExclusionPath (Join-Path $PSScriptRoot "\data")
  }

  if (!(Test-Path $cmPath)) {
    new-item -type directory -path $cmPath -Force
  }

  if (!(Test-Path $cdPath)) {
    new-item -type directory -path $cdPath -Force
  }

}


function SetupAndRun($composeFile)
{

  $azureRepository = "sitecoreimages.azurecr.io"
  $userName = "ZZZZZZZZZ"
  $password = "XXXXXXXXX"

  docker login $azureRepository -u $userName -p $password

  docker-compose -f $composeFile up -d --build

}

CreateWWWrootFoldersInCMAndCD
.\Set-LicenseEnvironmentVariable.ps1 -Path $PathToLicense  -PersistForCurrentUser:$true
SetupAndRun $ComposeFile

To make Sitecore TDS work properly, some changes had to be made in the docker-compose file.
When the CM and CD container starts up, they will call the C:\tools\entrypoints\iis\Development.ps1 script. The script does many things… One of them is to listen to changes in the root folder, C:\src. And if any changes, it will move content to the inetpub/wwwroot folder. (That is also why the data/cm/wwwroot folder is mapped to C:\src)

However there is an issue, it ignores web.config files. That means that all web.config files will be ignored, when they are deployed/published to the data/cm/wwwroot folder. For Sitecore TDS that is not good, because Sitecore TDS needs a web.config(in the _DEV folder) to get the SitecoreAccessGuid.

To fix this I have created a modified version of the Development.ps1, it's called Custom-Tools-Entrypoints-IIS-Development.ps1. The only thing that is changed is that it does NOT exclude web.config files. The script is placed in folder ContainerScripts, the folder is mapped to C:\scripts(in the docker container). Then in docker-compose, the CM container will call the Custom-Tools-Entrypoints-IIS-Development.ps1(instead of the original Development.ps1)

Now Sitecore TDS will work again πŸ™‚

Here(in docker-compose.9.3.0.xp.yml) you can see the "fix":

cm:
        image: ${REGISTRY}sitecore-xp-standalone:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
        volumes:
          - .\ContainerScripts:C:\scripts
          - .\data\cm\wwwroot:C:\src
          - ${REMOTEDEBUGGER_PATH}:C:\remote_debugger:ro
        entrypoint: powershell.exe -NoLogo -NoProfile -File C:\\scripts\\Custom-Tools-Entrypoints-IIS-Development.ps1 

Here is the whole docker-compose.9.3.0.xp.yml:

version: '2.4'

services:

  sql:
    image: ${REGISTRY}sitecore-xp-sqldev:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\data\sql:C:\Data
    mem_limit: 2GB
    ports:
      - "44010:1433"
    environment:
      SA_PASSWORD: ${SQL_SA_PASSWORD}
      ACCEPT_EULA: "Y"

  solr:
    image: ${REGISTRY}sitecore-xp-solr:${SITECORE_VERSION}-nanoserver-${NANOSERVER_VERSION}
    volumes:
      - .\data\solr:C:\Data
    mem_limit: 1GB
    ports:
      - "44011:8983"

  xconnect:
    image: ${REGISTRY}sitecore-xp-xconnect:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\data\xconnect:C:\inetpub\wwwroot\App_Data\logs
    mem_limit: 1GB
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_SITECORE:XCONNECT:COLLECTIONSEARCH:SERVICES:SOLR.SOLRREADERSETTINGS:OPTIONS:REQUIREHTTPS: 'false'
      SITECORE_SITECORE:XCONNECT:SEARCHINDEXER:SERVICES:SOLR.SOLRWRITERSETTINGS:OPTIONS:REQUIREHTTPS: 'false'
      SITECORE_CONNECTIONSTRINGS_MESSAGING: Data Source=sql;Database=Sitecore.Messaging;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_PROCESSING.ENGINE.STORAGE: Data Source=sql;Database=Sitecore.ProcessingEngineStorage;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_REPORTING: Data Source=sql;Database=Sitecore.Reporting;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION: Data Source=sql;Database=Sitecore.MarketingAutomation;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.PROCESSING.POOLS: Data Source=sql;Database=Sitecore.Processing.Pools;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.REFERENCEDATA: Data Source=sql;Database=Sitecore.ReferenceData;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_COLLECTION: Data Source=sql;Database=Sitecore.Xdb.Collection.ShardMapManager;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SOLRCORE: http://solr:8983/solr/sitecore_xdb
    depends_on:
      - sql
      - solr

  xconnect-automationengine:
    image: ${REGISTRY}sitecore-xp-xconnect-automationengine:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\data\xconnect-automationengine:C:\worker\App_Data\logs
    mem_limit: 500MB
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_CONNECTIONSTRINGS_XCONNECT.COLLECTION: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION: Data Source=sql;Database=Sitecore.MarketingAutomation;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.REFERENCEDATA: Data Source=sql;Database=Sitecore.ReferenceData;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_MESSAGING: Data Source=sql;Database=Sitecore.Messaging;User ID=sa;Password=${SQL_SA_PASSWORD}
    depends_on:
      - sql
      - xconnect

  xconnect-indexworker:
    image: ${REGISTRY}sitecore-xp-xconnect-indexworker:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\data\xconnect-indexworker:C:\worker\App_Data\logs
    mem_limit: 500MB
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_CONNECTIONSTRINGS_COLLECTION: Data Source=sql;Initial Catalog=Sitecore.Xdb.Collection.ShardMapManager;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SOLRCORE: http://solr:8983/solr/sitecore_xdb
      SITECORE_SITECORE:XCONNECT:SEARCHINDEXER:SERVICES:SOLR.SOLRREADERSETTINGS:OPTIONS:REQUIREHTTPS: 'false'
      SITECORE_SITECORE:XCONNECT:SEARCHINDEXER:SERVICES:SOLR.SOLRWRITERSETTINGS:OPTIONS:REQUIREHTTPS: 'false'
    depends_on:
      - sql
      - solr

  xconnect-processingengine:
    image: ${REGISTRY}sitecore-xp-xconnect-processingengine:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\data\xconnect-processingengine:C:\worker\App_Data\logs
    mem_limit: 500MB
    restart: unless-stopped
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_CONNECTIONSTRINGS_PROCESSING.ENGINE.STORAGE: Data Source=sql;Database=Sitecore.Processing.Engine.Storage;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_PROCESSING.ENGINE.TASKS: Data Source=sql;Database=Sitecore.Processing.Engine.Tasks;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_PROCESSING.WEBAPI.BLOB: http://xconnect
      SITECORE_CONNECTIONSTRINGS_PROCESSING.WEBAPI.TABLE: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XCONNECT.COLLECTION: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XCONNECT.CONFIGURATION: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XCONNECT.SEARCH: http://xconnect
      SITECORE_CONNECTIONSTRINGS_MESSAGING: Data Source=sql;Database=Sitecore.Messaging;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_REPORTING: Data Source=sql;Database=Sitecore.Reporting;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_SETTINGS:SERILOG:MINIMUMLEVEL:DEFAULT: Information
    depends_on:
      - sql
      - xconnect

  cd:
    image: ${REGISTRY}sitecore-xp-cd:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\ContainerScripts:C:\scripts
      - .\data\cd\wwwroot:C:\src
      - ${REMOTEDEBUGGER_PATH}:C:\remote_debugger:ro
    entrypoint: powershell.exe -NoLogo -NoProfile -File C:\\tools\\entrypoints\\iis\\Development.ps1
    ports:
      - "44002:80"
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_APPSETTINGS_ROLE:DEFINE: ContentDelivery
      SITECORE_CONNECTIONSTRINGS_SECURITY: Data Source=sql;Initial Catalog=Sitecore.Core;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_WEB: Data Source=sql;Initial Catalog=Sitecore.Web;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_EXPERIENCEFORMS: Data Source=sql;Initial Catalog=Sitecore.ExperienceForms;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SOLR.SEARCH: http://solr:8983/solr
      SITECORE_CONNECTIONSTRINGS_MESSAGING: Data Source=sql;Database=Sitecore.Messaging;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_EXM.MASTER: Data Source=sql;Database=Sitecore.EXM.Master;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XCONNECT.COLLECTION: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION.OPERATIONS.CLIENT: http://xconnect
      SITECORE_CONNECTIONSTRINGS_SITECORE.REPORTING.CLIENT: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.REFERENCEDATA.CLIENT: http://xconnect
    depends_on:
      - sql
      - solr
      - xconnect

  cm:
    image: ${REGISTRY}sitecore-xp-standalone:${SITECORE_VERSION}-windowsservercore-${WINDOWSSERVERCORE_VERSION}
    volumes:
      - .\ContainerScripts:C:\scripts
      - .\data\cm\wwwroot:C:\src
      - ${REMOTEDEBUGGER_PATH}:C:\remote_debugger:ro
    entrypoint: powershell.exe -NoLogo -NoProfile -File C:\\scripts\\Custom-Tools-Entrypoints-IIS-Development.ps1 
    ports:
      - "44001:80"
    environment:
      SITECORE_LICENSE: ${SITECORE_LICENSE}
      SITECORE_APPSETTINGS_ROLE:DEFINE: Standalone
      SITECORE_CONNECTIONSTRINGS_CORE: Data Source=sql;Initial Catalog=Sitecore.Core;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SECURITY: Data Source=sql;Initial Catalog=Sitecore.Core;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_MASTER: Data Source=sql;Initial Catalog=Sitecore.Master;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_WEB: Data Source=sql;Initial Catalog=Sitecore.Web;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_EXPERIENCEFORMS: Data Source=sql;Initial Catalog=Sitecore.ExperienceForms;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SOLR.SEARCH: http://solr:8983/solr
      SITECORE_CONNECTIONSTRINGS_MESSAGING: Data Source=sql;Database=Sitecore.Messaging;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION: Data Source=sql;Database=Sitecore.MarketingAutomation;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.PROCESSING.POOLS: Data Source=sql;Database=Sitecore.Processing.Pools;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.REFERENCEDATA: Data Source=sql;Database=Sitecore.ReferenceData;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_XDB.PROCESSING.TASKS: Data Source=sql;Database=Sitecore.Processing.Tasks;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_EXM.MASTER: Data Source=sql;Database=Sitecore.EXM.Master;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_REPORTING: Data Source=sql;Database=Sitecore.Reporting;User ID=sa;Password=${SQL_SA_PASSWORD}
      SITECORE_CONNECTIONSTRINGS_SITECORE.REPORTING.CLIENT: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XCONNECT.COLLECTION: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION.OPERATIONS.CLIENT: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.MARKETINGAUTOMATION.REPORTING.CLIENT: http://xconnect
      SITECORE_CONNECTIONSTRINGS_XDB.REFERENCEDATA.CLIENT: http://xconnect
      SITECORE_APPSETTINGS_TELERIK.ASYNCUPLOAD.CONFIGURATIONENCRYPTIONKEY: ${TELERIK_ENCRYPTION_KEY}
      SITECORE_APPSETTINGS_TELERIK.UPLOAD.CONFIGURATIONHASHKEY: ${TELERIK_ENCRYPTION_KEY}
      SITECORE_APPSETTINGS_TELERIK.WEB.UI.DIALOGPARAMETERSENCRYPTIONKEY: ${TELERIK_ENCRYPTION_KEY}
    depends_on:
      - sql
      - solr
      - xconnect

If you have issues, please run the following command:

docker-compose -f docker-compose.9.3.0.xp.yml down

To clean up/remove files in data folder, run script:

.\Clean-Data.ps1

Step 3. Update hosts file

We will be using whales names.
In PowerShell run the following:

npx whales-names

You should see something like this in your hosts file:

# whales-names begin
172.29.130.16   89746fe3a1b8 cd docker_cd_1
172.29.135.134  2bed266603b7 docker_xconnect-processingengine_1 xconnect-processingengine
172.29.139.155  cm de191be75c99 docker_cm_1
172.29.131.131  docker_xconnect-automationengine_1 e3958cc49df3 xconnect-automationengine
172.29.140.210  4cb4854bfc7d docker_xconnect_1 xconnect
172.29.140.131  75b2fe2f3928 docker_xconnect-indexworker_1 xconnect-indexworker
172.29.130.141  5a5f504cb5f7 docker_sql_1 sql
172.29.142.253  0add1137f154 docker_solr_1 solr
# whales-names end

Don't forget to terminate/close when you are done.

Last but very important. You need to set "basic-company" to your favourite instance in the hosts file.

172.29.139.155  cm de191be75c99 docker_cm_1 basic-company

Solution changes

To make the transition (from Sitecore 9.2 to Sitecore 9.3) to be as painless as possible. I’ve added a new “props” in the Build folder, Website.AssemblyVersionsProperties.props. It’s a variable that is used all over the solution to get the correct Sitecore version:

<Project>
  <PropertyGroup>
    <SitecoreVersion>9.3.0</SitecoreVersion>
  </PropertyGroup>
  
</Project>

It’s included in the Directory.Build.props:

<Project>
  <Import Project="Build/props/Website.AssemblyVersionsProperties.props"  />
  <Import Project="Build/props/Website.Publishing.props"  />
  <Import Project="Build/props/Website.Publishing.props.user" Condition="exists('$(SolutionDir)/Build/props/Website.Publishing.props.user')" />
  <Import Project="Build/props/Website.BuildProperties.props" />
  <Import Project="Build/props/Website.References.props"  />
  
  <Import Project="Build/props/Website.ProjectContent.props" />
</Project>

Here you can see how it’s used in the BasicCompany.Feature.BasicContent.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net472</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Sitecore.Kernel" Version="$(SitecoreVersion)">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Sitecore.Mvc" Version="$(SitecoreVersion)">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\Foundation\FieldRendering\website\BasicCompany.Foundation.FieldRendering.csproj" />
  </ItemGroup>
</Project>

There was one hiccup when I did the upgrade, it’s in the Project.BasicCompany.config
The Sitecore.Publishing.HtmlCacheClearer is no more in Sitecore 9.3
SmartHtmlCacheClearer is still there, perhaps we can use that one instead?
For now, I commented out the part that clears the cache:

<?xml version="1.0"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
  <sitecore>
    <sites>
      <site name="basic-company"
            inherits="website"
            hostName="basic-company"
            rootPath="/sitecore/content/Basic Company"
            dictionaryDomain="{B741B17B-67B2-4DD8-A216-D092813871F0}"
            patch:before="site[@name='website']" />
    </sites>
    <!--
    Sitecore.Publishing.HtmlCacheClearer is no more Sitecore 9.3.0
    Use SmartHtmlCacheClearer instead?
    
    <events>
      <event name="publish:end">
        <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
          <sites hint="list">
            <site hint="basic-company">basic-company</site>
          </sites>
        </handler>
      </event>
      <event name="publish:end:remote">
        <handler type="Sitecore.Publishing.HtmlCacheClearer, Sitecore.Kernel" method="ClearCache">
          <sites hint="list">
            <site hint="basic-company">basic-company</site>
          </sites>
        </handler>
      </event>
    </events>-->
    <settings>
      <setting name="Media.RequestExtension" set:value="" />
      <setting name="Media.RequestProtection.SharedSecret" set:value="CA972DAE5E21D2D65C945DD21D489" />
    </settings>
  </sitecore>
</configuration>

Now you can run Helix.Examples in Sitecore 9.3 πŸ™‚

If you have any issues, just ping me and I will try to help/guide you. The ongoing work happens in https://github.com/GoranHalvarsson/Helix.Examples/tree/master/examples/helix-basic-tds-with-docker-vs2019-project-type

That’s all for now folks πŸ™‚

`


2 thoughts on “Sitecore Helix Examples, Dockers… Now in #Sitecore 9.3

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.