HowToCode: Build/Deployment/WTF oder auch Automatisierung mit MSBuild

imageIn meinen Azubitagen habe ich mich doch des häufigen gefragt was denn nun ein Build oder ein Deployment ist. Mit der Zeit habe ich mich nun doch mit dem Mysterium beschäftigt und sogar angefangen mit MSBuild verschiedene Prozesse zu automatisieren. Wie sieht euer Prozess aus?

Grundbegrifflichkeiten

Ich will jetzt keine Wikierklärung von Build oder Deployment bringen sondern es mal auf das wesentliche runterbrechen bzw. soweit erklären wie ich es auch meinen Azubis weitergebe (wenn ich Quatsch erzähle, dann ist jetzt eure Chance mich zu korrigieren ;) )

  • Das “bauen” (“Build”) von Software passiert z.B. immer wenn ihr im Visual Studio auf den “Run” Button drückt. Im Hintergrund wird der Code kompiliert und im Falle einer ASP.NET Webanwendung wird der Development Server gestartet oder der lokale IIS.
  • Beim “Deployment” versteht man das letztendliche veröffentlichen der (gebauten) Software auf einen Webserver bzw. wenn man Clientsoftware hat spricht man auch vom “Rollout”.

Wenn euer Deployment-Prozess daraus besteht das ihr im Visual Studio auf “Build” drückt und das Ergebnis dann veröffentlicht, dann sollte man sich jedenfalls im professionellen Bereich Gedanken machen ;)

Diese Prozesse kann man teilweise auch automatisieren. Jedenfalls bis zu einem gewissen Grad.

MSBuild

MSBuild” ist das Build Framework von Microsoft. Visual Studio nutzt beim Klick auf den “Run” Knopf auch MSBuild. Natürlich kann man MSBuild auch per Kommandozeile aufrufen. Dadurch ist es möglich z.B. das bauen der .NET Anwendungen zu automatisieren. Auf die Möglichkeiten und was wir bisher machen gehe ich später noch kurz ein.

Ein genialer Einstieg zum Thema findet sich auf dem Blog von Thorsten Hans:
Das MSBuild Universum

“Continuous Integration”

In einem anderen Post bin ich bereits auf “Continuous Integration” eingegangen. Dort habe ich bereits angeschnitten was man noch für Möglichkeiten hat – jetzt möchte ich mal konkreter benenne wie wir das gelöst haben:

In unserem Projektteam haben nutzen wir die TFS2008 Teambuilds:

  1. Über den Teamexplorer werfe ich ein neues Deployment an.
  2. Dieses holt die Sourcen und baut die Solution.
  3. Die gebaute Website wird nun in unsere gewünschte Ordnerstruktur (wie sie auf dem Dev/Test/Livesystem ist vorhanden ist) gebracht
  4. Die “richtige” .config wird ausgewählt und in das config Verzeichnis geschoben.

In unserer Entwicklungsumgebung wird nun dieser Ordner auf den Webserver der Entwicklungsumgebung kopiert und fertig.
Auf den anderen Umgebungen zippen wir diesen Ordner und können diesen dann entsprechend kopieren und dann mit wenigen Handgriffen (kann man das evtl. aber noch mit Powershell oder VBScripts verbessern? -> siehe weiter unten) “live” schalten.

Wir sind auch schon (fast) zufrieden damit. Besonders auf unserer Entwicklungsumgebung hat dies sehr viel Zeit gespart, dass wir per Klick (über MSBuild und ein simplen xcopy Befehl) ein Deployment durchführen können.

Unterstützende MSBuild Packs:

Da MSBuild von Haus aus nicht sooo viel mitbringt, haben sich die beiden “Tools” sich noch bewährt:

Was vielleicht noch cool wäre…

Mit dem TFS2010 wird ja alles besser ( ;) ), aber was ich mir noch nett vorstelle wären diese Sachen:

  • MSDeploy. Alexander Groß hatte dies auch beim .NET UG Treffen vorgestellt und es wäre sicherlich einen Blick wert. Besonders um IIS Settings “zu ändern” wäre es evtl. hilfreich. Unser Buildserver hat keine direkte Verbindung zu Test bzw. Live (was ja auch ok soweit ist), doch wie kann man z.B. den Home Directory Pfad der Webanwendung auf den neuen Pfad lenken (die alten Versionen bleiben noch auf den Maschinen liegen)? Mit Powershell? Oder einem VBScript? Vorhanden ist ein IIS6
  • UI-Tests. Gibt es da vielleicht eine einfache Möglichkeit? Selenium oder gibt es etwas leichtgewichtigeres? Macht das denn überhaupt Sinn solche Tests auszuführen? :)
  • Die Changesets (und verbundene Tasks/Bugs) vom TFS seit dem letzten Deployment und die damit verbundenen Tasks – hat da jemand Erfahrung oder einen Blogpost zur Hand?

Wie macht ihr das? Welche Tools und Vorgehensweisen haben sich bei euch bewährt?


Kick It auf dotnet-kicks.de
Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by Robert Mühsig

Robert Mühsig (@robert0muehsig) ist Webentwickler und beschäftigt sich mit Web-Frameworks (vor allem dem ASP.NET MVC Framework) und scheut sich auch nicht vor Javascript. Ansonsten bloggt er über all jene Probleme, die ihm über den Weg laufen. Seit 2008 ist er Microsoft MVP für ASP.NET und er arbeitet bei der T-Systems Multimedia Solutions GmbH in Dresden. Treffen kann man ihn online via Twitter (@robert0muehsig) oder dieser Seite oder bei der .NET User Group Dresden.

4 Responses

  1. Im Zusammenspiel mit dem TFS kann ich den TFS Deployer (http://tfsdeployer.codeplex.com/) sehr empfehlen. Damit kannst du in Abhängigkeit von der Buildqualität in verschiedene Umgebungen deployen (bzw. Powershell Scripte rennen lassen, die dann deployen).
    Ich nutze dass in einem Projekt um so über den Teamexplorer in Test / QS oder Integration zu deployen. Eine sehr feine Sache!

    Reply
  2. Hi, zum Thema UI Test: Hast du schon mal “Watin” probiert? Macht einen guten Eindruck.
    http://watin.sourceforge.net/

    Reply
    • Ich hab es in dem Mvc Codecamp Server Projekt auf Codeplex gesehen. Sieht interessant aus. Da wir in der Firma den TFS 2010 zur Verfügung haben, würde ich aber erst einmal dort die TFS UI Tests näher betrachten. Wenn kein TFS vorhanden wäre, ist das bestimmt sehr cool. Aber wahrscheinlich auch mit viel Tipparbeit verbunden.

      Reply

Comment on this post

Letzte Posts

  • image.png
    RavenHQ–RavenDB in der Cloud

    Ayende Rahien hat es heute verkündet – RavenHQ, der RavenDB Cloud Hoster (natürlich von und mit Ayende) ist ab heute raus aus der Beta und man kann es von überall aus nutzen. In der Betaphase waren nur Nutzer von AppHarbor zugelassen. Was ist RavenHQ? RavenHQ ist im Grunde ein gehostes RavenDB in den Rechenzentren von ...

  • image.png
    GitHub for Windows–erste Eindrücke

    Git ist schon eine tolle Sachen und eröffnet viele neue Möglichkeiten – allerdings ist der Einstieg recht hart und selbst wenn man die guten Hilfsanleitungen auf GitHub befolgt, kommt man am Anfang nur langsam vorwärt. Insbesondere ist das Tooling für Windows / .NET Entwickler auch nicht gerade “bekanntes Terrain”. GitHub to the rescue! Die GitHub ...

  • image.png
    Chocolatey–apt-get für Windows

    Durch Zufall bin ich auf das Tool “Chocolatey” gestoßen. Wer die Website sich anschaut, wird evtl. eine Verwandschaft mit NuGet ausmachen. Was macht Chocolatey? Chocolatey ist ein “Maschine Package Manager”, das bedeutet, dass man für seine Maschine einfach Tools runterladen und Updaten kann – direkt über die Konsole. Was ist der Unterschied zu NuGet? NuGet ...

  • image.png
    SASS, LESS & Coffeescript in Visual Studio mit der Web Workbench

    CSS und Javascript sind die “kleinste” Schnittmenge von allen Browsern für die Erstellung von Web-Applikationen. Leider geht dabei etwas komfort verloren, daher lieben alle Webentwickler jQuery! SASS und LESS sind zwei Varianten, wie man “schöner” CSS schreiben kann und Coffeescript versucht Javascript Entwicklung zu vereinfachen. Aber immer der Reihe nach… Was ist SASS? SASS steht ...

  • image.png
    Code-Inside Sample nun auf GitHub: Google Code zu GitHub Migration

    Seit einiger Zeit habe ich Beispielcode auf Google Code bereitgestellt. Einfach nur noch weg von Google Code O-Ton damals war: Ich hatte mich für Google Code entschieden, weil ich hoffe dass früher oder später die Google Code Suche nutzbar ist und es dadurch wenigstens ein kleiner Mehrwert entsteht. Allerdings wirft es momentan noch ein Fehler. ...

Auf Amazon einkaufen & unterstützen

Facebook