Slide 1

Slide 1 text

CAKE - C# Make Automatisierung der Builds für C# Entwickler

Slide 2

Slide 2 text

WebDucer 13.02.18 2 Warum Automatisierung? ● Automatisierung – Wiederholbarkeit – Fehlervermeidung – Geschwindigkeit

Slide 3

Slide 3 text

WebDucer 13.02.18 3 Warum Scripte? ● Skripte? Was ist mit TFS? – Build-Definition in VCS sichern (zusammen mit passenden Code) – Gleicher Build auf CI-Server und lokal – Einfacher Wechsel des CI-Servers (zum Beispiel von TFS zu Gitlab CI)

Slide 4

Slide 4 text

WebDucer 13.02.18 4 Mögliche Kandidaten ● FAKE - F# Make ● PSake - PowerShell Make ● MSBuild ● NAnt ● Rake - Ruby Make

Slide 5

Slide 5 text

WebDucer 13.02.18 5 Warum CAKE (C# Make)? ● C# als Sprache (jeder C# Entwickler kann den Skript lesen und anpassen) ● Viele .Net-bezogene Erweiterungen vorhanden ● Eigene Erweiterung (in .Net) möglich ● Lauffähig unter Windows, macOS, Linux (.Net Core / Mono kompatibel) ● Tools / Erweiterungen über NuGet

Slide 6

Slide 6 text

WebDucer 13.02.18 6 Löschen von Build-Ordnern // // Cleanup all folders relevant for build // Task("_cleanup") .Does(() => { CleanDirectories("./**/obj"); CleanDirectories("./**/bin"); });

Slide 7

Slide 7 text

WebDucer 13.02.18 7 Wiederherstellen der NuGet Packages // // Restore all NuGet packages for solution // Task("_restore") .Does(() => { var solutionName = "RECY.sln"; NuGetRestore(solutionName); });

Slide 8

Slide 8 text

WebDucer 13.02.18 8 Erstellen von Solutions / Projekten // // Build unit tests // Task("_buildSolutions") .Does(() => { var solutionFiles = GetFiles("./**/*.sln"); var outputPath = MakeAbsolute("./GlobalBuildOutput"); foreach(var solution in solutionFiles){ MSBuild(solution, buildSettings => { buildSettings .SetConfiguration("Release") .WithTarget("Build") .WithProperty("OutputPath", pathEscape(outputPath)); }); } });

Slide 9

Slide 9 text

WebDucer 13.02.18 9 Abhängigkeiten von Schritten definieren // // Execute only unit tests // Task("Test") .IsDependentOn("_cleanup") .IsDependentOn("_restore") .IsDependentOn("_buildTests") .IsDependentOn("_runTests");

Slide 10

Slide 10 text

WebDucer 13.02.18 10 Addons / Tools einbinden // Tools #tool "nuget:?package=NUnit.ConsoleRunner&version=3.7.0" // Addins #addin "nuget:?package=Cake.HockeyApp&version=0.7.1"

Slide 11

Slide 11 text

WebDucer 13.02.18 11 Ausführen des Scriptes // Windows PS> build.ps1 -target "Test" // macOS / Linux $ ./build.sh --target="Test"

Slide 12

Slide 12 text

12 Fragen?