- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Architecture
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 1: Customize the TFS workflow
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 2: Configure TFS
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 3: Configure octopus
- The build number who appear in TFS
- The assemblies files
- The nuget packages
- The octopus versions
- Change the "Build number format" into the section "5. Advanced" of the TFS build definition by: $(BuildDefinitionName)_$(Date:1MMdd)$(Rev:.r). Be carefull with this number format. You can see that I have use 1MMdd and not YYYYMMdd as it is by default. The reason of that is that the Assembly number must between 0 and 65535. So you have a solution for the next 6 year by changing the 1 by another number :)
- Add a file .ps1 anywhere in the sources with the following content and do a check-in in TFS
- In the section 2.5 "Pre-build script path", refer to the powershell file you have created.
- In the section 2.5 "Pre-build script arguments", put the following value "-assemblyVersion 1.1.J.B -fileAssemblyVersion 1.1.J.B -nugetVersion 1.1.J.B". This mean that the powersell will replace the .J.B of the different files (assembly, assemblyVersion, nuget) by the same numbers as the build number of TFS
param
(
[string]$assemblyVersion,
[string]$fileAssemblyVersion,
[string]$nugetVersion
)
#Update the AssemblyInfo.cs and the .nuspec file to replace the X.X.J.B version number by the correct one depending of the number from TFS
function Update-SourceVersion
{
param
(
[string]$SrcPath,
[string]$assemblyVersion,
[string]$fileAssemblyVersion,
[string]$nugetVersion
)
$buildNumber = $env:TF_BUILD_BUILDNUMBER
Write-Host "env:TF_BUILD_BUILDNUMBER: $buildNumber"
if ($buildNumber -eq $null)
{
$buildIncrementalNumber = 0
}
else
{
$splitted = $buildNumber.Split('.')
$buildIncrementalNumber = $splitted[$splitted.Length - 1]
}
if ($fileAssemblyVersion -eq "")
{
$fileAssemblyVersion = $assemblyVersion
}
Write-Host "Executing Update-SourceVersion in path $SrcPath, Version is $assemblyVersion and File Version is $fileAssemblyVersion"
$AllVersionFiles = Get-ChildItem $SrcPath AssemblyInfo.cs -recurse
$jdate = Get-Date -format 1MMdd
Write-Host "Infos: jdate: $jdate, buildIncrementalNumber: $buildIncrementalNumber"
$assemblyVersion = $assemblyVersion.Replace("J", $jdate).Replace("B", $buildIncrementalNumber)
$fileAssemblyVersion = $fileAssemblyVersion.Replace("J", $jdate).Replace("B", $buildIncrementalNumber)
Write-Host "Transformed Assembly Version is $assemblyVersion and Transformed File Version is $fileAssemblyVersion"
foreach ($file in $AllVersionFiles)
{
Write-Host "Modifying file " + $file.FullName
#save the file for restore
$backFile = $file.FullName + "._ORI"
$tempFile = $file.FullName + ".tmp"
Copy-Item $file.FullName $backFile
#now load all content of the original file and rewrite modified to the same file
Get-Content $file.FullName |
%{$_ -replace 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', "AssemblyVersion(""$assemblyVersion"")" } |
%{$_ -replace 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)', "AssemblyFileVersion(""$fileAssemblyVersion"")" } > $tempFile
Move-Item $tempFile $file.FullName -force
}
$nugetVersion = $nugetVersion.Replace("J", $jdate).Replace("B", $buildIncrementalNumber)
Write-Host "Transformed Nuspec Version is $nugetVersion"
$AllNugetFiles = Get-ChildItem $SrcPath *.nuspec -recurse
$replaceExp = '<file src="$1" target="$2.' + $nugetVersion + '.update" />'
foreach ($file in $AllNugetFiles)
{
Write-Host "Modifying file " + $file.FullName
#save the file for restore
$backFile = $file.FullName + "._ORI"
$tempFile = $file.FullName + ".tmp"
Copy-Item $file.FullName $backFile
#now load all content of the original file and rewrite modified to the same file
Get-Content $file.FullName |
%{$_ -replace '<version>[0-9]+(\.([0-9]+|\*)){1,3}</version>', "<version>$nugetVersion</version>" } |
%{$_ -replace '<file src="(.*NationalLottery\.DeHub\..*)" target="(.*)\.[0-9]+(\.([0-9]+|\*|J|B)){1,3}.update" />', $replaceExp } > $tempFile
Move-Item $tempFile $file.FullName -force
}
}
Write-Host "Running Pre Build Scripts"
$scriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
$scriptRootBuildFunctions = "$scriptRoot\TFSUtils.psm1"
Write-Host "Script root: $scriptRootBuildFunctions"
if ($assemblyVersion -eq "")
{
$assemblyVersion = "1.1.0.0"
$fileAssemblyVersion = "1.1.J.B"
}
$srcPath = "$scriptRoot/../"
Update-SourceVersion $srcPath $assemblyVersion $fileAssemblyVersion $nugetVersion
If you use the script to create and deploy the Octopus packages as describe in the previous post, don't forget to complete the "Post-build script arguments" to "-releaseVersion 1.1.J.B" to use the same versioning system and having this number as release number in Octopus.
Ok that is it now. I hope that this tutorial will help you in your deployment process.
You also have a video presented to the Sitecore Virtual User Group who could be useful for it here: http://sitecoreug.org/events/January
Here is the index of all the post who compose this tutorial:
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Architecture
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 1: Customize the TFS workflow
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 2: Configure TFS
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 3: Configure octopus
- Setup a continuous integration for Sitecore with TDS - TFS 2013 and Octopus - Step 4: Align the version number

No comments:
Post a Comment