2009-02-02 11 views
9

Wir haben mehrere Produkte, die viel geteilten Code haben und die mehrere Versionen beibehalten müssen.Die beste Möglichkeit, Eclipse-Projekte mit Ant in Hudson oder einem anderen CI-Tool automatisch auszuprobieren und zu kompilieren?

Um dies zu handhaben, verwenden wir viele Eclipse-Projekte, einige enthalten Bibliotheks-Jars, und einige enthalten geteilten Quellcode (in mehreren Projekten, um einen riesigen Haufen mit zahlreichen Abhängigkeiten zu bekommen, während alles von Grund auf neu kompiliert werden kann Quelle und Binärdateien sind konsistent). Wir verwalten diese mit projectSet.psf, da diese alle Projekte direkt aus CVS herausziehen und einen vollständig vorbereiteten Arbeitsbereich hinterlassen können. Wir machen keine Ameisen-Builds direkt oder benutzen Maven.

Wir wollen nun in der Lage sein, alle diese Projekte und ihre verschiedenen Versionen in ein Continous Integration Tool zu integrieren - ich mag Hudson, aber das ist nur eine Frage des Geschmacks - was im Wesentlichen bedeutet, dass wir einen automatischen Weg zur Überprüfung bekommen müssen die Projekte in einen neuen Arbeitsbereich auslagern und die Quellordner wie in den Projektdateien in jedem Projekt beschrieben kompilieren. Hudson bietet keinen solchen Ansatz, um ein Projekt zu bauen, also habe ich darüber nachgedacht, wie der beste Weg dazu aussehen könnte.

Ideen haben

  • Suche gewesen oder eine Ameise Plugin/Konverter schreiben, die projectSet.psf der und Karte zu cvs-Kasse versteht und Tags kompilieren.
  • Erstellen Sie die build.xml-Dateien in Eclipse und verwenden Sie diese. Ich habe das ausprobiert und festgestellt, dass das Ergebnis sehr ausführlich und mit absoluten Orten ist, was mit automatischen Tools nicht gut ist, die Dateien dorthin bringen, wo sie wollen.
  • Schreiben Sie ein Hudson-Plugin, das projectSet.psf versteht, um eine Konfiguration abzuleiten und sie zu erstellen.
  • nur den sauren Apfel beißen und manuell erstellen und die CI-Konfiguration aktualisieren, wenn Sachen Pausen - ich diese Erfahrungen über andere Völker nicht wie :)

ich wirklich möchte ich entscheiden kann, so hören, wie man Nähern Sie sich diesem.


Edit: Eine weitere Option könnte einen CI verwenden, die besser über Eclipse-Projekte kennen und/oder Projekt Sets. Wir sind nicht religiös - es geht nur darum, Dinge in Gang zu bringen, ohne alles selber machen zu müssen. Wäre Cruise Control vielleicht eine bessere Option? Andere?


Bearbeiten: Gefunden, dass ant4eclipse eine "Team Project Set" -Funktion hat. http://ant4eclipse.sourceforge.net/


Edit: Verwendet, um den ant4eclipse und ant-contrib ant Erweiterungen einen kompletten Arbeitsbereich als sjgned runnable jar-Datei ähnlich die Runnable Jar Anlage in Eclipse 3.5M6 zu bauen. Ich bin immer noch abhängig von Eclipse, um den ersten leeren Arbeitsbereich zu erstellen und das ProjectSet zu extrahieren, das ist die nächste Hürde.


Edit: mit einer Doppelkonfiguration Ended, nämlich, dass Hudson extrahiert den gleichen Satz von Modulen, wie sie in der ProjectSet.pdf Datei aus dem CVS aufgeführt (die den gleichen Tag haben muss), was sie nächstes lokalisiert werden zueinander. Dann funktioniert ant4eclipse gut mit der im Hauptmodul eingebetteten Datei projectSet.psf. Vorbehalt: Die Modulliste in Hudson muss manuell aktualisiert werden, und es scheint, dass anschließend eine manuelle Bereinigung des Arbeitsbereichs erforderlich ist, damit Hudson "erkennt", dass es jetzt mehr Projekte als früher gibt.Das hat jetzt für ein paar Monate gut für uns funktioniert, aber es war ziemlich mühsam, alles in der Ameisenfeile arbeiten zu lassen.


Edit: Die "Use Team Projekte" mit ant4eclipse und Strg-A, Ctrl-C in Project Panel mit Ctrl-V in den CVS-Projekte in Hudson hat für uns gut genug, um zu arbeiten, stellte sich heraus, leben mit (für reife Projekte wird dies sehr selten geändert). Ich erwarte die Veröffentlichung von ant4eclipse 1.0 - http://www.ant4eclipse.org/, derzeit in Meilenstein 2 - um zu sehen, wie viel Eigenbau-Funktionalität durch ant4eclipse-Dinge ersetzt werden kann.

Edit: ant4eclipse ist ab 20100609 in M4 so der Zeitplan bei http://www.ant4eclipse.org/node?page=1 ist etwas rutschig.


Edit: Mein Fazit für einen längeren Zeitraum unseres ant4eclipse Ansatzes nach der Verwendung ist, dass der Build-Skript sehr knorrigen erhalten und ist schwer zu pflegen. Auch die Team ProjectSet-Funktion (mit der ant4eclipse die Projekte lokalisieren kann) funktioniert gut für CVS-basierte Repositories, aber nicht nachdem wir zu git migriert sind (was eine große Sache für sich ist). Neue Projekte werden höchstwahrscheinlich auf Maven basieren, da dies in Jenkins gute Unterstützung findet.

Antwort

1

schreiben Hudson-Plugin, das projectSet.psf der versteht eine Konfiguration und bauen sie abzuleiten.

Das scheint wie die gewinnende Antwort zu mir.

Ich arbeite mit CruiseControl anstatt Hudson, aber in meiner Erfahrung, wenn Sie ein Plugin erstellen können, das Ihr Problem löst, wird es sich schnell auszahlen. Und es ist im Allgemeinen ziemlich einfach, ein Plugin zu schreiben, das für Ihre Lösung maßgeschneidert ist, im Gegensatz zu einem, das für alle in einer ähnlichen Situation funktionieren muss.

+0

Hinweis: Ich habe jetzt eine Ameisen-Datei mit ant4eclipse erstellt, um "ausführbare JAR-Dateien" zu generieren, was sehr mühsam war, aber das langfristige Ziel ist es, Hudson über Eclipse-Projekte zu unterrichten. –

3

Ich bin mir nicht ganz sicher, ob ich das Problem verstehe, aber es hört sich an wie das Grundproblem ist, dass Sie viele Projekte haben, von denen einige von anderen abhängig sind. Einige der Projekte, die näher am "Blatt" des Abhängigkeitsbaums sind, müssen in der Lage sein, "stabile" (oder zuvor "freigegebene") Versionen der mehr "Kern" -Projekte zu verwenden.

Ich löse genau dieses Problem mit Hudson, ant und ivy. Ich folge einem Muster, das von Clark in Pragmatic Project Automation demonstriert wurde (er zeigt nicht die Abhängigkeitsprobleme und Lösungen, und er verwendet CruiseControl statt Hudson.)

Ich habe eine handgeschriebene ant build datei (wir nennen es "cc- build.xml ", aufgrund unserer CruiseControl-Roots.) Diese Datei ist dafür zuständig, den Arbeitsspeicher für das Projekt vom CM-Repository aus zu aktualisieren und den Inhalt für zukünftige Referenz zu kennzeichnen. Es übergibt dann die Kontrolle an eine andere handgeschriebene Ameisen-Build-Datei (build.xml), die von den Entwicklern jedes Projekts bereitgestellt wird. Dieses Projekt ist für die herkömmlichen Build-Schritte (Kompilieren, Packen usw.) verantwortlich. Es ist erforderlich, die installierbaren Artefakte, Komponententestberichte usw. in das Hudson-Artefakte-Verzeichnis auszuspucken. Es ist meine Erfahrung, dass automatisch generierte Build-Dateien (von Eclipse oder anderen ähnlichen IDEs) niemals annähernd so robust sind, dass sie in einem CI-Szenario verwendet werden können.

Darüber hinaus verwendet es Ivy, um seine eigenen Abhängigkeiten aufzulösen. Ivy unterstützt genau spezifizierte Abhängigkeitsversionen (zB "benutze Version 1.1") und unterstützt "unscharfe Versionen" (zB "benutze Version 1.1+" oder "nutze die neueste Version im Integrationsstatus"). Unsere Projekte beginnen typischerweise mit der Angabe sehr "Fuzzy" -Version für interne Projekte, die sich in der laufenden Entwicklung befinden, und wenn sie einem Release-Punkt nahe kommen, "frieren" sie die Abhängigkeitsversion ein, so dass sich die Dinge nicht mehr unter ihnen bewegen.

Die Nicht-Blatt-Projekte (Projekte, die von anderen Projekten abhängig sind) verwenden auch Efeu, um ihre Artefakte in unserem internen Efeu-Repository zu veröffentlichen. Dieses Repository enthält alle früheren Builds der Abhängigen, sodass jedes Projekt immer von einer anderen vorherigen Version abhängig sein kann.

Schließlich ist jedes Projekt in Hudson so konfiguriert, dass es einen Build-Trigger hat, der eine Neuerstellung verursacht, wenn eines seiner abhängigen Projekte erfolgreich erstellt wird. Dadurch werden sie mit der (möglicherweise) neuen Efeu-abhängigen Version wieder aufgebaut.

Es ist erwähnenswert, dass, sobald Sie dies auf und ablaufen, konsistente automatisierte "Kennzeichnung" oder "Tagging" eines automatisierten Build-Eingänge für Sie entscheidend sein wird - sonst wird die Fehlerbehebung Post-Build-Probleme führen ein Hornissennest entwirren müssen, um die ursprüngliche Quelle zu finden.

Um all diese Einstellungen für unsere Umgebung zu erhalten, waren einige Anstrengungen nötig (vor allem beim Einrichten des Efeu-Repositorys und der Ameisen-Build-Dateien), aber es hat sich bei der manuellen Verwaltung der Abhängigkeiten und gesparte Kopfschmerzen bezahlt gemacht verringerter Aufwand bei der Fehlerbehebung

1

Ich habe sowohl Cruise Control (CC) als auch Hudson für unsere CI-Lösung ausprobiert. Wir (als Unternehmen) entschieden uns für Hudson. Aber für Ihre Frage "Unterstützt CC Eclipse Projekt Build" ist die Antwort nicht so weit wie ich weiß. CC unterstützt viele andere Build-Tools und Source-Control-Systeme, aber es ist ein wenig schwieriger zu konfigurieren und zu verwenden. Wie für Hudson ist es einfacher zu konfigurieren und zu verwenden. Wir haben unsere benutzerdefinierten Plugins für CC und Hudson für die Teile unseres Build-Zyklus entwickelt, die sie nicht so bereitstellen wie sie sind. Wie für die Entwicklung von Plugins, wenn Sie Maven kennen/verwenden, ist Hudson auch einfacher. Aber wenn Sie mit Maven nicht vertraut sind, müssen Sie zunächst die grundlegende Verwendung von Maven lernen, um ein Hudson-Plugin erfolgreich zu entwickeln. Aber sobald Sie die grundlegende Verwendung von Maven verstehen, ist Plugin-Entwicklung, Test und sogar Debugging einfacher in Hudson.

Für Ihr spezifisches Problem kann ich an eine Lösung denken, die auch Eclipse-Plugins verwendet. Sie können ein eigenes Eclipse-Plugin entwickeln, das zum Beispiel die psf-Dateien aus einem (konfigurierbaren) Ordner bezieht und Eclipse-Interna verwendet, um diese psf-Dateien zu verarbeiten. Ich meine, dass Sie vorhandene Eclipse-Quellcodes verwenden können, die eine PSF-Datei aufnehmen, ihre Projektdefinitionen auschecken und diese Projekte kompilieren. Dieses Eclipse-Plugin von dir kann eine Präferenzseite haben (auf die du über Eclipse zugreifen kannst -> Fenster -> Einstellungen) und konfigurieren, welcher Ordner benutzt wird, um nach PSF-Dateien zu suchen. Ihr Eclipse-Plugin sollte auch eine Möglichkeit bieten, die psf-Verarbeitung ohne Benutzerinteraktion zu starten. Dazu können Sie Ihren Prozess mit ipc auslösen. Ich meine, Ihr Eclipse-Plugin kann auf einen Port warten, und Sie können eine andere Java-Anwendung schreiben, die sich über diesen Port mit Ihrem Plugin verbindet und dessen Prozess auslöst. Wie beim CI-Teil können Sie entweder CC oder Hudson verwenden und ihre externe Unterstützung für die Prozessausführung verwenden. Wenn Sie Windows verwenden, können Sie eine Fledermausdatei (für Linux sh-Datei) schreiben, die Eclipse startet, auf der Ihr Plugin installiert ist. Dann startet es Ihre Java-Anwendung, die mit Ihrem Eclipse-Plugin kommunizieren wird, um Ihren Prozess auszulösen. Von Ihrem CI-Tool müssen Sie Ihre bat/sh-Datei ausführen, um Ihren Prozess auszulösen.