| 

.NET C# Java Javascript Exception

8

Für den SimpleObjectStore nutze ich nun erstmals FAKE um den Build zu konfigurieren. FAKE ist ein Tool in F# das es sehr einfach macht, Builds zu konfigurieren, Build-Schritte zu definieren und auszuführen. F# wird dabei als Script-Sprache verwendet. Allerdings muss man kein F# können um FAKE zu nutzen, da die Syntax selbstbeschreibend, also recht einfach zu verstehen und zu schreiben ist.

Warum FAKE?

Ich habe in anderen Projekten bereits MSBuild eingesetzt, allerdings ist es für kleine Sachen, mit ein paar Spezialanforderungen dann doch recht mühsam zu nutzen. FAKE bietet von Haus aus einige Features die für mich interessant waren. So kann ich recht bequem die AssemblyInfos erstellen, NuGet-Packages können per Nuspec-Templates konfiguriert und erstellt werden. Nuget-Packages können automatisch nach NuGet.org deployed werden. Und ich kann Eigene Targets bequem per C# hinzufügen.

Zudem hat FAKE einfach auf Anhieb funktioniert.

Noch lieber hätte ich SAKE eingesetzt (eine auf C# basierendes MAKE), allerdings war die Installation wesentlich komplizierter und es wird seit zwei Jahren nicht mehr weiterentwickelt.

Jenkins

Der nächste Schritt ist, das Build-Script auf im Jenkins mit dem NuGet-Deployment einzurichten. Aber hier sehe ich absolut keine Probleme. Da ich FAKE einfach per Konsole starten kann, kann ich es auch per Jenkins als Batch Command aufrufen.

Dokumentation zu FAKE

Das Build-Script ist auf BitBucket im Source-Code enthalten. Wer es sich anschauen möchte kann das gerne machen.

Wer selber mit FAKE herumspielen möchte, dem empfehle ich die Dokumentation auf der offiziellen Website, die mit guten Beispielen zu Standardszenarien ausgestattet ist.

Einzig bei speziellen Anforderungen muss man selber herumspielen, bis man zur Lösung kommt. In meinem Fall baue ich Verschiedene DLLs für verschiedene .NET-Versionen. Alle Assemblies haben den gleichen Namen. Das heißt, ich kann die nicht in ein einziges Output-Verzeichnis bauen lassen, das sie sich sonst ständig überschreiben würden. Das hat Probleme beim erstellen des NuGet-Packages gemacht, bzw. es gab in der Doku kein Beispiel wie das zu behandeln ist. Die Lösung war dann doch einfacher: Die verschiedenen Assemblies müssen einfach über das NuSpec-Template entsprechend eingebunden werden. Lediglich das WorkingDirektory muss in der Config angepasst werden:

NuGet (fun p ->
    {p with
        Project = projectName
        Version = releaseNotes.AssemblyVersion
        Authors = [projectAuthor]
        Description = projectDescription
        Summary = projectSummary
        ReleaseNotes = toLines releaseNotes.Notes
        WorkingDir = "./"
    })
    "Gos.SimpleObjectStore.nuspec"

Weiterhin wird beim erstellen der AssemblyInfo eine statische Klasse angelegt, die die Versionsnummer enthält. Auf die Art kann einfach und performant auf die Version zugegriffen werden. Abschalten lässt sich das nicht und wie das anzupassen ist, wird in der Doku nicht gezeigt. Man bekommt das hin, wenn man etwas in der F# Dokumentation und in den FAKE-Sourcen nachschaut:

CreateCSharpAssemblyInfoWithConfig  "./Gos.SimpleObjectStore/Properties/SolutionInfo.cs"
    [Attribute.Title projectName
     Attribute.Description projectDescription
     Attribute.Product projectName
     Attribute.Company projectAuthor
     Attribute.Version releaseNotes.AssemblyVersion
     Attribute.InformationalVersion releaseNotes.AssemblyVersion
     Attribute.FileVersion releaseNotes.AssemblyVersion]
    {GenerateClass = true; UseNamespace = "Gos.SimpleObjectStore.Properties"}

Aus den Sourcen konnte ich lesen, das die Konfiguration (hier in der letzten Zeile) eine eigene Klasse ist. In der F# Dokumentation musste ich schauen, wie man eine Klasse instanziiert um diese an die Methode zu übergeben.

.net nuget deployment build jenkins buildserver fsharp fake
Weitere News:
Schreibe einen Kommentar:
Themen:
fake fsharp buildserver jenkins build deployment nuget .net
Entweder einloggen... ...oder ohne Wartezeit registrieren
Benutzername
Passwort
Passwort wiederholen
E-Mail
TOP TECHNOLOGIES CONSULTING GmbH