Was ist der Unterschied zwischen Hudson und CruiseControl für Java-Projekte?

72

Ich denke, der Titel fasst es zusammen. Ich möchte nur wissen, warum das eine oder andere besser für die kontinuierliche Integration von Java-Projekten von Svn ist.

Jay R.
quelle

Antworten:

36

Als langjähriger CruiseControl-Committer und jemand, der Hudson noch nie benutzt hat, bin ich ziemlich voreingenommen, aber meine Meinung dazu ist:

Hudson ist viel einfacher in Betrieb zu nehmen (größtenteils über eine schöne Weboberfläche) und verfügt über eine sehr aktive Plugin-Entwickler-Community.

CruiseControl wird von vielen Drittanbietern unterstützt und bietet den Vorteil, dass Sie mit der XML-Konfiguration einige nette Tricks ausführen können, z. B. Plugin-Vorkonfiguration und include.projects, mit denen Sie die Konfigurationsinformationen mit dem Projekt versionieren können.

Wenn Sie nur ein paar Builds haben wollen, denke ich, dass Hudson der klare Gewinner ist. Wenn Sie viel haben wollen - und die XML nicht stören -, dann werden die XML-Konfigurationstricks von CruiseControl meiner Meinung nach zu einer echten Stärke.

Jeffrey Fredrick
quelle
117

Ich stimme dieser Antwort zu , wollte aber einige Punkte hinzufügen.

Kurz gesagt, Hudson (Update: Jenkins ) ist jetzt wahrscheinlich die bessere Wahl. In erster Linie, weil das Erstellen und Konfigurieren von Jobs ("Projekte" im CC-Vokabular) über die Web-Benutzeroberfläche von Hudson viel schneller ist als das Bearbeiten der XML-Konfigurationsdatei von CruiseControl (die wir zur Versionskontrolle verwendet haben, um den Überblick zu behalten). . Letzteres ist nicht besonders schwierig - es ist einfach langsamer und langweiliger.

CruiseControl war großartig, aber wie in Dan Dyers treffend benanntem Blog-Beitrag erwähnt, warum verwenden Sie Hudson immer noch nicht? , es leidet darunter, der Erste zu sein. (Ähm, wie Großbritannien, wenn Sie so wollen, später in der industriellen Revolution, als andere anfingen, es mit neueren Technologien zu überholen.)

Wir haben CruiseControl stark genutzt und sind nach und nach auf Hudson umgestiegen und haben es schließlich ausschließlich verwendet. Und noch schwerer: Dabei haben wir begonnen, den CI-Server für viele andere Zwecke als zuvor zu verwenden, da das Einrichten und Verwalten von Hudson-Jobs so praktisch ist. (Wir haben jetzt mehr als 40 Jobs in Hudson: die üblichen Build & Test-Jobs für stabile und Entwicklungszweige; Jobs im Zusammenhang mit der Freigabe (Erstellen von Installationsprogrammen usw.); Jobs, bei denen einige (experimentelle) Metriken für die Codebasis ausgeführt werden; Jobs, die ausgeführt werden (langsam) ) UI- oder Integrationstests für eine bestimmte Datenbankversion usw.)

Aus dieser Erfahrung heraus würde ich argumentieren, dass Hudson, selbst wenn Sie viele Builds haben, einschließlich komplizierter, eine ziemlich sichere Wahl ist, da Sie wie CC damit grundsätzlich alles tun können . Konfigurieren Sie Ihren Job einfach so, dass alle Ant- oder Maven-Ziele, Unix-Shell-Skripte oder Windows .bat-Skripte in der gewünschten Reihenfolge ausgeführt werden.

Was das Zeug von Drittanbietern betrifft ( hier von Jeffrey Fredrick erwähnt ) - das ist ein guter Punkt, aber ich habe den Eindruck, dass Hudson schnell aufholt und dass bereits eine sehr große Anzahl von Plugins dafür verfügbar ist.

Für mich sind die beiden Dinge, die ich an CruiseControl vermissen kann:

  1. Die Warn-E-Mails über defekte Builds waren informativer als die von Hudson. In den meisten Fällen war die Hauptursache in der gut formatierten HTML-Mail von CC selbst zu erkennen, während ich bei Hudson normalerweise dem Link zur Hudson-Web-Benutzeroberfläche folgen und ein wenig herumklicken muss, um die Details zu erhalten.
  2. Das CruiseControl-Dashboard eignet sich sofort als " Informationsstrahler " (auf einem öffentlichen Monitor angezeigt oder an eine Wand projiziert, sodass Sie immer schnell den Status aller Projekte sehen können). Mit Hudsons Titelseite brauchten wir einige Greasemonkey-Tricks, um Jobzeilen schön grün / rot zu machen.

Kleiner Haftungsausschluss: Ich habe das CC-Projekt seit etwa einem Jahr nicht mehr genau verfolgt. (Aber auf den ersten Blick hat sich nichts dramatisch geändert.)

Hinweis (2011-02-03): Hudson wurde umbenannt / gegabelt wie Jenkins (von Hudson Schöpfer Kohsuke Kawaguchi und andere). Es sieht so aus, als würde Oracle - das den Hudson-Namen kontrolliert - auch " Hudson " behalten , aber meine persönliche Empfehlung ist, mit Jenkins zu gehen , egal was Oracle sagt.

Jonik
quelle
16
Fast zwei Jahre später stimme ich immer noch mit allem überein, was ich oben über Hudson geschrieben habe ( jetzt in Jenkins umbenannt ). Als Ergänzung hier einige weitere interessante Dinge, für die ich Hudson seitdem verwendet habe: Starten Sie neue AWS EC2-Instanzen von bestimmten AMI und stellen Sie dort unsere neueste Software direkt aus der Versionskontrolle bereit; Lassen Sie (technisch versierte) Kunden das Erscheinungsbild einer Demo-Anwendung steuern (indem Sie eine von der App verwendete Konfigurationsdatei bearbeiten) und bestimmte Verwaltungsvorgänge für die von der App verwendete Datenbank ausführen (parametrisierte Jobs sind nützlich) ... (Forts )
Jonik
1
... Überprüfen Sie regelmäßig, ob eine Website oder ein Dienst in Betrieb ist. Änderungen vom Trunk zu allen Arbeitszweigen kurz nach einem erfolgreichen Trunk-Build automatisch zusammenführen; und so weiter. Es ist erwähnenswert, dass Hudson in den meisten Fällen lediglich ein Front-End für ein Shell / Python / etc-Skript oder ein "sichtbarer" Ersatz für einen Cronjob war. Aber dann ist es für solche Zwecke sehr gut! In einem Projekt bat der Kunde speziell um weitere Hudson-Jobs für Administrations- / Reinigungsarbeiten, nachdem ich einen erledigt hatte. Für die Bedürfnisse, die sie hatten, war es vollkommen ausreichend und viel praktischer als sich auf einem Server anzumelden, um ein Skript auszuführen.
Jonik
30

Mein letztes Projekt haben wir mit CruiseControl gestartet. Welches rockte. Dann zogen wir nach Hudson, was noch mehr rockte. Die Dinge, die ich an Hudson mochte:

  • Die vor- und nachgelagerten Projekte. Ein Commit für Ihren Datenzugriffscode löst also möglicherweise auch einen Build der Präsentationsschicht aus.

  • Verwenden Sie ein vorhandenes Projekt ganz einfach als Ausgangspunkt für ein neues Projekt. Wenn Sie also die Gewohnheit haben, Entwicklungszweige zu erstellen, ist es ein Kinderspiel, sicherzustellen, dass diese kontinuierlich integriert werden.

Toolkit
quelle
4
+1, stimme vollkommen zu, insbesondere in Bezug auf den zweiten Punkt. Aus diesem Grund haben wir Hudson für viele Dinge verwendet (mehr dazu: stackoverflow.com/questions/604385/… )
Jonik
1
In Bezug auf Ihren zweiten Punkt ist es auch mit CC einfach, "ein vorhandenes Projekt als Ausgangspunkt für ein neues zu verwenden": Kopieren Sie einfach die entsprechenden Dateien, nehmen Sie die entsprechenden Änderungen vor und registrieren Sie das neue Projekt in ccnet.config. Wirklich ziemlich einfach. "Leicht" kann in diesem Fall im Allgemeinen nur "leicht" sein, wenn Jenkins über CC betrachtet wird - in einer GUI im Vergleich zu XML-Dateien. TMTOWTDI, aber keines ist besonders schwierig.
J0e3gan
15

Ein Unterschied ist, dass Hudson das Produkt eines einzigen genialen Intellekts ist - Kohsuke Kawaguchi. Aus diesem Grund ist es konsistent, kohärent und absolut solide. Der Nachteil könnte eine gewisse Einschränkung der Fortschrittsrate sein. Kohsuke ist jedoch unglaublich produktiv, deshalb würde ich mir darüber keine Sorgen machen. Und es ist erweiterbar. Wenn es also etwas gibt, für das Kohsuke keine Zeit hat (oder nicht will), können Sie es wahrscheinlich selbst tun.

erickson
quelle
4

Ich habe mir sowohl Cruise Control als auch Hudson angesehen, mich aber für Hudson entschieden, da es viel einfacher einzurichten und zu konfigurieren war. Hudson scheint heutzutage sehr verbreitet zu sein, mit regelmäßigen Veröffentlichungen und viel Erweiterbarkeit durch Plugins. Ich kann es nur empfehlen.

Kennzeichen
quelle
3

Hudson ist meiner Meinung nach die benutzerfreundlichere Alternative. Es kann vollständig über die Weboberfläche eingerichtet und gewartet werden (abgesehen von der Erstinstallation der Webanwendung natürlich).

Dies kann nur über CruiseControl gesagt werden, wenn Sie den integrierten XML-Datei-Editor zählen.

Nachdem ich beide verwendet habe, würde ich immer noch einen vorziehen, der keinen automatisierten Build hat.

Joachim Sauer
quelle
"Nachdem ich beide verwendet habe, würde ich es vorziehen, wenn jemand keinen automatisierten Build hat." +1 für ein Maß an geistiger Gesundheit. Inmitten der Wut und der hohen Religiosität, die Jenkins in letzter Zeit umgibt, scheinen die Menschen zu oft zu vergessen, dass CC, Jenkins und andere ausgereifte CI-Alternativen Mittel zum Zweck sind - der Zweck ist letztendlich das, was mehr zählt als die Mittel. Persönlich finde ich CC einfach zu benutzen, selbst als relativer Neuling. Jenkins geht es auch gut. Aber eine so große Sache über das eine gegen das andere zu machen, ist viel Lärm um nichts IMO.
J0e3gan
1

Ich habe Tempomat ausprobiert ... Es ist gut ... Aber Dokumente sind fragmentiert. Das Dashboard ist verwirrend. Die Erstellung von Widgets ist ebenfalls verwirrend. Ich habe es nie mit Hudson versucht. Werde es am Wochenende versuchen.


quelle
0

Ich habe Jenkins kürzlich für den Bau von Borland BDS 2006-Projekten unter Verwendung von Subversion eingerichtet und bin sehr zufrieden damit. Ich habe CruiseControl noch nie verwendet, daher kann ich es nicht vergleichen. Lesen Sie meinen Blog-Beitrag für weitere Informationen.

Kontinuierliche Integration des Delphi-Projekts mit Jenkins

Richard Zwinkels
quelle