Suche
Welcher Continuous-Integration-Server ist der richtige für mich?

CI-Server im Vergleich: Jenkins vs. CruiseControl vs. Travis

Tam Hanna

© Shutterstock.com/eurovector

Joel Spolskys im Jahr 2000 erschienener Joel Test schlug die tägliche Erzeugung von teamweiten Builds vor. Als Continuous-Integration-Server bezeichnete Systeme lösen dieses Problem automatisch – sie kompilieren die von ihnen verwalteten Elemente – nomen est omen – permanent. Doch was können die einzelnen CI-Server, und welcher ist der richtige für mein Projekt?

Seit dem Erscheinen von CruiseControl im Jahre 2001 hat sich das Feld der CI-Server immens verbreitert. Entwickler können heute aus einer Vielzahl verschiedener Produkte wählen – in der Praxis muss man sich zwischen den folgenden drei Kandidaten entscheiden:

  • CruiseControl
  • Jenkins
  • Travis CI

Das als Urvater von Jenkins dienende Hudson findet an dieser Stelle schon deshalb keine Erwähnung mehr, weil das Entwicklerinteresse nach dem Fork von Jenkins fast komplett zusammengebrochen ist – von der praktischen Nutzung in Neusystemen kann zum heutigen Zeitpunkt nur noch abgeraten werden.

CI der Mittelmäßigkeit

Wie so oft in der IT gibt es auch hier keine Freikugel: Wer ein Ziel erfolgreich diskutieren möchte, muss das korrekte Werkzeug wählen. Beginnen wir unsere Betrachtungen mit Travis CI – es handelt sich dabei um einen CI-Server der offen mit ihrer Vorliebe für Mittelmäßigkeit werbenden Firma GitHub. Aus der Logik folgt, dass das Produkt nur dann zur Verfügung steht, wenn man seinen Code dem Unternehmen anvertraut – das zugegebenermaßen chinakritische Zitat des in den USA ansässigen UnME2-CEOs fasst die Sinnhaftigkeit dieser Vorgehensweise bei nicht-quelloffener Software gut zusammen.

If you are considering storing your code, possiblly your most valuable asset, on github (or anywhere else on the ‚cloud‘), you might consider sending it directly to China in the service of efficiency.

Zur Nutzung von Travis muss man sich im ersten Schritt unter https://travis-ci.org/ anmelden. Das Backend der Seite erlaubt das Auswählen all jener GitHub-Projekte, die von Travis mitverwaltet werden sollen. Die Konfiguration erfolgt über eine Datei namens travis.yml – das .yml-File muss im Rahmen eines Git-Pushes in das Repository wandern, da Travis die Arbeit sonst nicht aufnimmt.

Lesen Sie auch: 10 Open Source Testing Tools: Welches passt zu mir?

Der genaue Kompilationsprozess ist von Plattform zu Plattform unterschiedlich. Im Fall von C setzt die Engine beispielsweise auf eine dedizierte VM, die mit einigen Werkzeugen ausgestattet ist.

Am wichtigsten ist das in allen .yml-Files gleichermaßen vorhandene language-Feld, das das CI-System über die Art der durchzuführenden Operation informiert. Ein schönes Beispiel wäre die im Snippet gezeigte .yml-Datei, die Travis zur Kompilation eines Android-Projekts animiert:

language: android

android:

components:

– build-tools-19.1.0

– android-19

– sys-img-armeabi-v7a-android-19

Zum Zeitpunkt der Veröffentlichung dieses Artikels unterstützt Travis gute zwei Dutzend Sprachen. Achten Sie darauf, dass die zum Test angebotene Umgebung nicht immer der entspricht, was man als Entwickler erwartet. So wird .Net-Code unter Linux mit Mono getestet: Wer windowsspezifische Bibliotheken in seinen Test einbeziehen möchte, hat das Nachsehen.

Informationen über Erfolg und Mißerfolg sind nicht auf das Webinterface beschränkt. Neben dem Versand von E-Mails ist Travis auch zum Absetzen von Meldungen an beliebige Webseiten befähigt – das in GitHub-Lingo als WebHook bezeichnete Feature ruft beliebige URLs auf und überträgt eine JSON-Payload mit weiteren Informationen. Diese lassen sich dann zum Anstoßen beliebiger Prozesse einspannen.

Wer Travis in einem kommerziellen Produkt nutzen möchte, muss auf einen der kommerziellen Verträge ausweichen. Die monatliche Rate beginnt bei fürstlichen 129 US-Dollar (siehe: https://travis-ci.com/plans).

Golden Oldie im Einsatz

Auch wenn erste Papers zu Continuous Integration schon früher erschienen: Das in der Einleitung erwähnte CruiseControl startete den “CI-Craze”. Leider ist das Produkt mittlerweile nicht mehr wirklich in aktiver Entwicklung, das letzte Release erfolgte im Jahr 2010. Dies lässt sich auch anhand einer von switch::gears veröffentlichten Studie überprüfen, die – unter anderem – das in Abbildung 1 gezeigte Diagramm zur Aktivität der Entwicklermailinglisten enthält:

tamhan-1

Abb. 1: CruiseControl erweckt nur noch minimales Entwicklerinteresse, Biuld: http://gitgear.com/why_jenkins/CI_Ranking_2013Q3_F1.pdf

Wer sich mit der Metapher des “Never change a running system” anfreunden kann, findet in CruiseControl einen zuverlässigen Partner zur Realisierung eines robusten CI-Systems für Java-Entwickler. Laden Sie die binäre Distribution herunter und führen Sie das Installationsskript aus – nach dem Start des CruiseControl-Daemons ist die Installation auch schon abgeschlossen.

Zum ersten Kompilationsprozess fehlt dann nur noch das Anlegen einer Konfigurationsdatei. CruiseControl integriert sich in die Eclipse-IDE: Wer die Konfiguration nicht in einem Texteditor zusammenbauen möchte, kommt so mit geringem Aufwand ans Ziel.

Zudem gibt es mit CruiseControl.net und CruiseControl.rb zwei Neuimplementierungen, die auf die Bedürfnisse von .Net- oder Ruby-Entwicklern zugeschnitten sind. Insbesondere ersteres ist interessant, weil es in der Microsoft’schen .Net-Runtime lebensfähig ist – der Test kann so in derselben VM erfolgen, die auch für die Programmausführung verantwortlich ist.

Grüße aus Lusakka

Auch wenn der Name Jenkins insbesondere im angelsächsischen Raum lustige Assoziationen weckt: Das aus einem Fork des von Oracle verwalteten Hudson entstandene Produkt hat sich im Laufe der letzten Jahre als Quasistandard in Sachen CI etabliert.

Das als .war-Datei vorliegende Projekt realisiert einen vollständigen Server, der durch diverse Plug-ins mit zusätzlichen Funktionen ausgestattet werden kann. Ein besonders interessantes Feature ist die Errichtung von “Testclustern”: Ein Jenkins-Server kann so Unix-, Windows- und MacOS-Maschinen ergreifen, um Unit-Tests automatisch auf mehreren Plattformen abzuarbeiten.

Für die Interaktion zwischen CI-Server und Umgebung wird normalerweise auf das Webinterface zurückgegriffen, das von Haus aus auf Port 8080 angeboten wird. Dies ist im Vergleich zu Travis ein starker Komfortgewinn – Konfigurationsdateien sind nicht jedermanns Sache. Jobs lassen sich mittels weniger Klicks im Backend einrichten; für komplexere Java-Umgebungen wie Android stehen fertige Tutorials zum Abruf bereit.

Lesen Sie auch: Logging Tools im Vergleich: Splunk – Loggly – Graylog – Papertrail – TestView – Logstash – SumoLogic

Auch wenn Jenkins in Java geschrieben wird, sieht es sich selbst nicht als Buildsystem für javabasierte Applikationen. Die Zielsprache wird durch Plug-ins festgelegt. Wer seinen Jenkins-Server unter Windows betreibt, kann seine .Net-Apps auf eine native Art und Weise testen. Dank flexibler Triggering-Möglichkeiten kann ein Jenkins-Server sogar aus Visual Studio Team Services heraus mit neuem Code versorgt werden.

Ein weiteres interessantes Feature – CruiseControl bietet es, wenn auch in eingeschränktem Rahmen, ebenfalls – ist die Möglichkeit, den CI-Server mit diversen statischen Analysewerkzeugen auszustatten. Auf diese Art und Weise wird hochgeladener Code automatisch nach Bugs durchsucht. Manche statische Analysesysteme legen eine geradezu beeindruckende Eigenintelligenz zu Tage.

Jenkins muss nicht unbedingt selbst gehostet werden. Diverse Dienstleister bieten Unternehmen-gehostete Jenkins-Instanzen an: ob der großen Konkurrenz sind die Preise hier vergleichsweise gering. Consultingunternehmen bieten auch Support an – das aus dem Linux-Umfeld bekannte Angebot lohnt sich insofern, als man sich den Einlernaufwand erspart.

Fazit

Nach Meinung des Autors ist Jenkins der klare Sieger für kommerzielle Projekte: Wer in seinem Unternehmen keine ausgewiesenen Experten für CruiseControl hat, macht mit dem weit verbreiteten und sehr populären CI-Server mit Sicherheit nichts falsch. CruiseControl lohnt sich nach Meinung des Autors derweil nur noch dann, wenn andere Produkte nur für den Oldie zur Verfügung stehen.

Travis spielt seine Stärken immer dann aus, wenn es um die Verwaltung von in GitHub gehosteten Code geht. Kommt das Projekt mit den Eigenheiten der Testruntime aus, so spricht nichts dagegen, dem kostenlosen Angebot eine Chance zu geben. Für kommerzielle Projekte ist das Produkt derweil nicht nur ob des hohen Preises eine eher schlechte Option.

Aufmacherbild: 3D Sparkling Lightning Bolt von Shutterstock / Urheberrecht: eurovector

Geschrieben von
Tam Hanna
Tam Hanna
Tam Hanna befasst sich seit der Zeit des Palm IIIc mit der Programmierung und Anwendung von Handcomputern. Er entwickelt Programme für diverse Plattformen, betreibt Onlinenewsdienste zum Thema und steht unter tamhan@tamoggemon.com für Fragen, Trainings und Vorträge gern zur Verfügung.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: