Freitag, April 06, 2007

Continuous Integration (CI) mit MSBuild/SVN/CCNET/...

Hallo Entwickler,

 

ich bin gestern auf einen schönen mehrteiligen Artikel über CI gefunden. Der Artikel ist wirklich nett, vor allem um zu sehen, wie es bei anderen das Vorgehen ist. Den Artikel findet ihr hier.

 

Ich finde den Build-Prozess allerdings bei uns zum Teil besser. Auf unserem Build-Server sind folgende Anwendungen vorhanden:

1.  CruiseControl.Net

2.  Brinki Labeler (oder so ähnlich)

3.  .Net Framework 2.0

4.  Nunit

5.  FxCop

6.  Ndoc

7.  MSBuild Community Tasks

8.  MiKTeX

9.  Subversion

10.WIX

11.Python

12.Apache 2.2

 

Apache und Python werden nur benötigt, weil auf dem Server auch noch die Sourcen abgelegt sind und Trac aktiv sind.

CCNet ist für das Versionieren und das Starten von Builds zuständig, was wirklich super klappt. Allerdings werden die meisten Aufgaben innerhalb der Build-Scripts ausgeführt, so dass diese auch manuell mit entsprechenden Parametern gestartet werden können. Das Bauen der Quellen erfordert somit ein vollständiges Einfügen aller Referenzen in SVN. Um wirklich CI machen zu können, gibt es im CCNet Teilprojekte, die nur einen Teil der Applikation erzeugen, oder nur Sourcen abrufen, kompilieren und testen.

 

Ein Build bei uns läuft grundsätzlich in folgenden Schritten ab:

1.  Löschen der Arbeitsverzeichnisse und bereinigen des Systems

2.  Abrufen der Sourcen

3.  Kompilieren der Sourcen

4.  Zusätzliche notwendige Dateien kopieren

5.  Erstellen der Source Code Dokumentation

6.  Erstellen der LateX-Dokumente

7.  Archiv aus 3 bis 7 erzeugen

8.  Erstellen eines MSI

9.  Ausführen von UnitTests (Alles was die Kategorie „Automated“ hat)

10.FxCop ausführen

Während des Builds werden Versionsnummern in Dokumenten und Quelldateien aktualisiert bzw. ersetzt. Zusätzliche können Applikationen auch automatisch deployed werden, so dass Testsystem immer aktuell sind.

 

Vielleicht poste ich mal einige Auszüge aus den Build-Scripts,

Jan

 

Noch was: Eigentlich sollte für die Generierung der SandCastle zum Einsatz kommen, aber bei der Generierung crashed SandCastle, so dass ich lieber wieder zu Ndoc zurück gegangen bin. Allerdings musste für Fx2 noch etwas modifiziert werden, da es sonst zu Fehlern bei Generics kam.

Keine Kommentare: