Removing Gulp from your CI Pipeline for Helix style solution with PowerShell

As previously discussed, if you have an Helix style solution, and you want to replace Gulp with PowerShell this script can come quite useful…

The principle is not to use Gulp for Build and packaging neither on your local environment (see this other post to see how to do it: https://sitecorecommerce.wordpress.com/2019/11/02/powershell-to-publish-helix-base-solution-with-visualstudio-2019-without-gulp/

neither on your Build server / Azure Pipeline….

as you can imagine PowerShell is your friend 🙂

In my specific example, I have instrumented it with VS 2017 but this script would work with any version of MS Build assuming that all parameters are supported….

BuildAndPublish

The principle is a pretty simple loop through all the project in Feature / Foundation / Project and just calling a simple MSBuild command to publish the project within my Temp folder….  Msbuild will build each project, and publish each project copying the Bin / Views / and configs in the Temp folder keeping your solution structure…

Once you have the temp folder, you can then Zip the package and use to deploy on your Sitecore instance…

 

Powershell to publish Helix base solution with VisualStudio 2019 without GULP

As most of Sitecore developers I quickly fall in love with Helix base solution approach but when it comes to developer experience Gulp was not feeling like the best match for build and deployment neither on my local machine…

As you have probably experienced, getting Gulp up and running is pretty simple, but as you start adding projects and complexity to your solution the build time increase exponentially and I have seen solutions where the Gulp build task taking more than 20 minutes, compared to 1-2 minutes of a standard Visualstudio build & publish command….

Therefore my idea to use Powershell even to deploy on my local machine for a full build and publish of my solution locally…

The idea is to hook in the full build and publish of all the projects on the publish of the main website project…

In reality, the code to achieve it, it is pretty simple and you can get it to work pretty easy since you need to worry only about three areas:

  1. Clean up of configs
  2. Build and publish of all the projects
  3. Copy configs that did not come after the full publish

As additional steps, you may consider including the Unicorn or TDS synchronisation to replicate what you do within Gulp but personally, I like to run manually all the items synchronisation to keep closer control and have quicker build and publish time…

Few things to do to get it running:

1.  Install prerequisites

IIS Management Script and Tools must be enabled from ‘turn windows features on or off’

preReqPS.JPG

2. Copy the powershells script and powershell config in the website – configuration folder

You need these two files from my Gist: https://gist.github.com/steliodibello/4cb47563ce43b922b943a000ec072853

remember to replace XXX with your project name

3. Amend the main webiste project to invoke the powershell on the after build step

<Target Name=”PublishAll” AfterTargets=”CopyAllFilesToSingleFolderForPackage”>
<Exec Command=”powershell.exe -NonInteractive –ExecutionPolicy Unrestricted -command &quot;&amp; { &amp;’$(SolutionDir)Configuration\PostPublish.ps1′ -solutionPath ‘$(SolutionDir)’ } &quot;” />
</Target>

 

For further reference and similar blogs who have inspired mine, have a look at:

https://www.onceinawhitemoon.net/2019/04/automatically-deploy-all-sitecore-helix-projects/

and

https://whipeter.wordpress.com/2018/09/07/sitecore-helix-build-and-deploy-powershell-script/