There is lots of information about how to build continuous integration, continuous delivery and continuous deployment for enterprise Sitecore projects. But, none of these include information about Sitecore projects on GitHub with CI/CD (at least I haven’t faced with them). That is why I have decided to write a step-by-step guide on how to get CI/CD for your Sitecore pet project for free.
Let’s start:
- Create accounts for GitHub and AppVeyor (using authorization via GitHub)
- Create your Sitecore project and push it to GitHub
- Create and push appveyor.yml file to your repository
#Version of project could be based on build number version: 1.0.{build} #Path(s) to artifacts. We will create Sitecore update package and ship it as artifact artifacts: - path: build\artifacts\*.update name: Sitecore.Akamai before_build: #Configure Nuget to use public Sitecore packages feed - nuget sources add -Name SitecorePublicFeed -Source https://sitecore.myget.org/F/sc-packages/api/v3/index.json #Restore packages configured in solution - nuget restore Sitecore.Akamai.sln build: #Solution file project: Sitecore.Akamai.sln #Configuration of deployment artifacts to GitHub as release. It is not possible to save artifacts on Appveyor due to limited time of storage (30 days) after_build: #Run PowerShell script that will build .update Sitecore package - ps: .\build\build.ps1 deploy: #Release name release: Sitecore.Akamai-v$(appveyor_build_version) #Description of release description: 'Using Akamai features inside Sitecore' #Deploy to GitHub provider: GitHub #Secure token to upload files to GitHub https://www.appveyor.com/docs/deployment/github/ auth_token: secure: rkLSxUbN2YMMG/r6lzLq1PN0n07dqJBtk/8ZR2c/InGy0SBOsmqGXfIQWMQOZUAs draft: false prerelease: false on: branch: master # release from master branch only appveyor_repo_tag: true # deploy on tag push only install: #Intallation of Sitecore.Courier Powershell module to have ability to build Sitecore package - ps: Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) #Intallation of Sitecore.Courier to have ability to build Sitecore package - choco install sitecore-courier
4. Commit and push powershell script that will prepare Sitecore update package with files and items using Sitecore.Courier
#Get package version from Appveyor $version = $env:APPVEYOR_BUILD_VERSION if ($version -eq $null) { $version = "1.0.0" } "Package version: " + $version #Clear build directories Remove-Item build\package -Recurse -ErrorAction Ignore Remove-Item build\artifacts -Recurse -ErrorAction Ignore #Create directories structure for package New-Item -Name build\package -ItemType directory New-Item -Name build\artifacts -ItemType directory New-Item -Name build\package\Data -ItemType directory New-Item -Name build\package\bin -ItemType directory New-Item -Name build\package\App_Config\Include\Foundation -ItemType directory #Copy Sitecore items and assemblies to proper location Copy-Item .\src\Foundation\Akamai\code\bin\Foundation.Akamai* .\build\package\bin Copy-Item .\src\Foundation\Akamai\code\App_Config\Include\Foundation\Foundation.Sitecore.Akamai.config .\build\package\App_Config\Include\Foundation Copy-Item .\src\Foundation\Akamai\serialization\* .\build\package\Data -recurse #Run Sitecore Courier to prepare .update package $packageCmd = "Sitecore.Courier.Runner.exe -t build\package -o build\artifacts\sitecore.akamai." + $version + ".update -r" iex $packageCmd
5. Add a new project to Appveyor from GitHub
6. Configure the publishing of artifacts. Create a new GitHub token. Encrypt it using AppVeyor and update appveyor.yml with new encrypted value.
7. Update readme.md file with badge of build statusThat is all. After next commit to your GitHub repo, new AppVeyor build will be triggered and Sitecore update package will be prepared. Sitecore update package will be available from artifacts tab on build details page. New GitHub release will be created after the creation of the new tag in the repository. The release will contain an archive of source files and Sitecore .update package. Update package will contain files and items and could be installed on any Sitecore website using update installation wizard.
As a bonus, you can configure code metrics on Sonar Cloud for free:
- Create a new Sonar Cloud account using GitHub authorization
- Generate new Sonar Cloud token and encrypt it using AppVeyor
- Change you appveyor.yml configuration:
before_build: #Start SonarQube runner - MSBuild.SonarQube.Runner.exe begin /k:"Sitecore.Akamai" /d:"sonar.host.url=https://sonarqube.com" /d:"sonar.login=%sonar_token%" /d:"sonar.organization=github-antonytm" /n:"Sitecore.Akamai" after_build: #Stop SonarQube runner - MSBuild.SonarQube.Runner.exe end /d:"sonar.login=%sonar_token%" - ps: .\build\build.ps1 environment: sonar_token: secure: xxx #Put your encrypted Sonar Cloud token here install: #Install msbuild SonarQube runner - choco install "msbuild-sonarqube-runner" -y4. Update readme.md file with Sonar Cloud code quality badges.
It took some time to set up this configuration first time. But for the second project, it took less than half an hour. This free lightweight cloud CI/CD is a good investment in saving your time to avoid preparing new builds manually. And you should not necessarily select services described in this article. It is only one way that was shown as an example. GitHub could be replaced with Bitbucket, AppVeyor with TravisCI, etc.
You can see all this in action inside my repository on GitHub.