Automatisierte Builds für SharePoint Add-Ins mit VSO

In Visual Studio Online kann mithilfe von automatisierten Builds auch eine Continuous Integration für SharePoint Add-Ins ermöglicht werden. Die Builds bilden Beispielweise die Grundlage für das Continuous Deployment über das Release Managment. Das erstellte Add-In kann aber auch über PowerShell oder den App Katalog bereitgestellt werden.

Build einrichten

Um ein Build einrichten zu können wird zunächst ein Repository in Visual Studio Online benötigt, welches das SharePoint Add-In enthält. Als Repository kann zum Beispiel Git verwendet werden.

Für das Projekt kann nun eine neue Build Definition angelegt werden. Dies ist über den Link „Build & Releases“ möglich. Visual Studio Online bringt bereits viele Vorlagen für die Erstellung von neuen Build Definitionen mit (z.B. für ASP.NET), für dieses Beispiel habe ich eine leere Build Definition ohne vorbelegte Schritte verwendet.

Nach der Auswahl von dem richtigen Repository werden die folgenden Tasks benötigt:

  1. NuGet Restore
  2. Visual Studio Build
    • MSBuild Arguments: /p:IsPackaging=True
    • Configuration: Release
    • MSBuild Architecture: MSBuild x64
  3. Copy Files
    • Source Folder: $(agent.builddirectory)
    • Contents: **\bin\Release\**
    • Target Folder: $(build.artifactstagingdirectory)
  4. Publish Build Artifacts
    • Path to Publish: $(build.artifactstagingdirectory)
    • Artifact Name: drop

Für die Erstellung von dem App Paket wird in dem Visual Studio Build Task das MSBuild Argument „/p:IsPackaging=True“ benötigt.

SharePoint Add-In Build Definition

 

Add-In Version

Um bei dem Bild die Version von dem Add-In automatisch zu aktualisieren muss zunächst das Build number format der Build Definition auf den Wert „$(date:yyyy.MM.dd)$(rev:.r)“ geändert werden.

SharePoint Add-In Build Number

Außerdem wird in dem Repository von dem Add-In ein PowerShell Script benötigt. Dieses Script wird als Task vor dem Visual Studio Build Task aufgerufen und ändert die Version in der AppManifest.xml.

ChangeAppVersion.ps1
Param(
[string]$path = $env:BUILD_SOURCESDIRECTORY,
[string]$buildNumber = $env:BUILD_BUILDNUMBER,
[regex]$pattern = "\d+\.\d+\.\d+\.\d+"
)
try{
if ($buildNumber -match $pattern -eq $true) {
$version = $Matches[0]
Get-ChildItem -Path $path -Filter "AppManifest.xml" -Recurse -ErrorAction SilentlyContinue | %{
Set-ItemProperty $_.FullName IsReadOnly $false
$file = [System.IO.File]::ReadAllText($_.FullName)
[xml]$xml = $file
$xml.App.version = $version
[System.IO.File]::WriteAllText($_.FullName, $xml.OuterXml)
}
}
else{
Write-Error "No match for build number '$buildNumber' using pattern [$pattern]"
exit 1
}
}
catch {
Write-Error "$_"
exit 1
}

SharePoint Add-In Version