Der richtige Ansatz für ein Buildserver muss erst einmal gefunden werden. Ich möchte hier nicht auf alle eingehen sondern gleich ein ausgewähltes System vorstellen. Es handelt sich dabei um Maven1. Dieses System basiert auf Plugins und stellt eine masse an Möglichkeiten bereit.
Wer seinen Buildprozess2 automatisieren möchte sollte sich damit vertraut machen. So ein Maven-Projekt bringt von haus aus eine eigene Konventionen mit sich die man nach Möglichkeit auch nutzen sollte. Aber auch für Projekte die Technisch an eine bestimmte Struktur gebunden sind, gibt es Lösungsansätze. Eines sollte man über Maven wissen und sich auch immer im klaren sein, es gibt keinen Standard. Wie ein Build Lifecycle aussehen sollte, richtet sich immer nach den Projekt(en).
Maven bietet aber ein Standard Buildprozess aus folgenden Plugin an:
- clean (Säubern)
- validate (Validieren)
- compile (Kompilieren)
- test (Testen)
- package (Verpacken)
- integration-test (Integrations-Tests)
- verify (Gültigkeitsprüfung)
- install (Installieren im lokalen Repository)
- deploy (Installieren im entfernten Repository)
- site (Generierung der Dokumentation)
Jede Phase stellt ein Plugin dar und übernimmt verschiedene Aufgaben und definiert letztendlich den Buildprozess. Im folgenden die einzelnen Schritte im Detail:
- Entfernt Artefakte3 von vorherigen Builds
- Validiert4 das Projekt auf Korrektheit und prüft ob alle Abhängigkeiten5 gegeben sind
- Kompiliert den Programmcode
- Testet den kompilierten Programmcode mit Hilfe eines unit-testing-framework6. Diese Tests sollten nicht verlangen, dass der Code gepackt (packaged) oder ausgeliefert (deployed) sein muss.
- Fasst den kompilierten Code in einem bestimmten Format zusammen, z.b. zu einer jar.
- Integrationstests auf anderen Systemen. Es wird dabei getestet ob das Projekt auf dem Zielsystem funktionstüchtig ist.
- Hier können sonstige Tests angestoßen werden die prüfen ob das Projekt gültig und ggf. bestimmte Qualitätskriterien erfüllt sind.
- Installiert das Package in das lokale Repository7, worauf lokale Projekte in Abhängigkeit dies nutzen können.
- Installiert das Package in ein entferntes Repository. Dies wird verwendet um stabile Versionen anderen Programmierern zu verfügung zu stellen.
- Erstellt eine Projekt-Dokumentation. Ebenfalls ist es hier möglich JavaDocs oder Code-Duplicates anzeigen zu lassen.
Es ist für den Anfang sicher etwas viel. Wenn man sich aber etwas eingelesen hat und langsam dahinter steigt, lässt sich daraus eine Menge machen. Und darum geht es in dieser Storyline, einen automatischen Buildprozess aufzubauen.
- http://maven.apache.org/ [↩]
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html [↩]
- Artefakte sind beispielsweise jar- oder zip-Pakete die durch das kompilieren erstellt werden können. Diese sind zu meist mit einer Versionierung versehen. Diese Artefakte können von anderen Projekten in Abhängigkeit genutzt und eingesetzt werden. [↩]
- Damit prüft das Plugin durch ob im Programmcode Fehler enthaten sind. Das beste Beispiel dafür sind Errors. [↩]
- Projekte greifen i.d.R. auf andere Resourcen zu und damit wird geprüft ob diese vorhanden sind. [↩]
- Ein bekanntes Framework ist JUnit: http://www.junit.org/ [↩]
- Stellt ein Verzeichnis da, wo sämtliche Maven und hauseigenen Projekte verwaltet und genutzt werden können [↩]
