Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CAKE - Buildscript für C# Entwickler

CAKE - Buildscript für C# Entwickler

CAKE (C# Make) ist ein Build-Skript DSL, die in C# geschrieben ist und somit von jedem C# Entwickler verstanden wird.

Eugen Richter

February 13, 2018
Tweet

Other Decks in Programming

Transcript

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

    View Slide

  2. WebDucer 13.02.18
    2
    Warum Automatisierung?

    Automatisierung
    – Wiederholbarkeit
    – Fehlervermeidung
    – Geschwindigkeit

    View Slide

  3. 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)

    View Slide

  4. WebDucer 13.02.18
    4
    Mögliche Kandidaten

    FAKE - F# Make

    PSake - PowerShell Make

    MSBuild

    NAnt

    Rake - Ruby Make

    View Slide

  5. 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

    View Slide

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

    View Slide

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

    View Slide

  8. 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));
    });
    }
    });

    View Slide

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

    View Slide

  10. 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"

    View Slide

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

    View Slide

  12. 12
    Fragen?

    View Slide