Hudson – Continiuous Integration

Nachdem wir nun unser “Semester-Projekt Part I” beinahe abgeschlossen haben, habe ich mir “Hudson” nochmals genauer angeschaut und mal ausprobiert. Für Java-Projekte, und insbesondere Web-Projekte (welche mit Java implementiert werden) eigent sich Hudson hervorragend. Hudson wurde selber in Java programmiert und benötigt einen “ServletContainer” (eine Art (Web-)Server, welcher das Java-Webapp ausführt). Ich habe mich für Tomcat entschieden, da wir Tomcat auch für die Entwicklung unseres Projektes verwenden und die Installation von Hudson beinahe null Aufwand mit sich bringt.

Was macht nun dieses “Hudson” genau? Beim Programmieren eines Webprojektes möchte man immer mal wieder testen ob alles funktioniert, ob alte Bugs repariert sind und ob sich evtl. neue Bugs eingeschlichen haben. Vorallem wenn auch Nicht-Programmierer an diesem Prozess beteiligt sind, muss das ganze Projekt auf einem Testserver eingerichtet werden und für die Tester zugänglich sein. Dabei muss bei jeder Änderung das Projekt kompiliert und übertragen werden. Hudson übernimmt nun diesen Teil. Der Quelltext wird von der Versionsverwaltung geholt, kompiliert und alles es keine Fehler gibt eingerichtet. Zusätzlich können Test-Mechanismen wie JUnit oder TestNG eingebunden werden. Entwickler können (falls gewünscht) direkt benachrichtigt werden, falls das Kompilieren fehlschlägt, usw.

Hudson kann auch mit anderen Programmiersprachen als Java umgehen und ist nicht nur auf Webprojekte beschränkt. Die Konfiguration ist sehr flexibel gestaltet und alles ist durch Plugins erweiterbar. Dies führt leider auch zu einer gewissen Komplexität. Für sehr kleine Projekte wird der Aufwand für die Konfiguration wohl beinahe ein bisschen zu gross. Ausserdem muss sich auf dem Server ein Compiler, und alles weitere befinden um das Projekt zu kompilieren und das ist für die Sicherheit des Server nicht unbedingt optimal. Weiter muss man den Beteiligten am Projekt bis zu einem gewissen Grad vertrauen können, denn diese können mit Änderungen am Code relativ viel Unfug anstellen auf dem Server. Meiner Meinung nach fehlt das “Sandboxing” ein wenig. Kann man mit diesen Nachteilen leben, macht Hudson das Leben der Programmierer um einiges leichter und beschleunigt die Arbeitsabläufe.

Viel Spass beim ausprobieren:

Tomcat6, Java, JDBC4, eine MySQL-Datenbank und “Communications link failure”

Damit uns der Einstieg in unser Semester-Projekt nicht so schwer fällt haben wir eine Muster-Anwendung inklusive Anleitung bekommen. Wir benutzen Java und wollen eine Web-Anwendung schreiben. Als Web-Server benutzen wir Tomcat6 und für die Datenbank MySQL.

Soweit so gut. VirtualBox war schon installiert, Ubuntu in ein paar Minuten heruntergeladen und kurze Zeit später lief mein Developpement-System. Tomcat6, JDK, eclipse, MySQL, etc waren schnell installiert und alles lief super. Die Homepage wurde angezeigt… und als ich mich “Registrieren” wollte:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Vollständige Fehlermeldung: http://bin.esheep.ch/2

Mit dem Befehl:

telnet localhost 3306

Konnte ich zum Server verbinden, Die Datenbank war also erreichbar. Ich prüfte die Konfiguration der Datenbank. Der Benutzer war korrekt eingerichtet, die Tabelle vorhanden (alles korrekt und so wie es in der Anleitung stand). Schlussendlich lag der Fehler daran, dass zwar die Datenbank erreichbar ist, jedoch Tomcat die Registrierungs-Anwendung nicht verbinden lies. TCP-Verbindungen sind mit den Default-Einstellungen vebroten.

Mit folgendem Befehl kann das init-Script geöffnet werden:

sudo EDIT /etc/init.d/tomcat6

Da muss anschliessend die Zeile “TOMCAT6_SECURITY=yes” gesucht und durch “TOMCAT6_SECURITY=no” ersetzt werden. Falls vorhanden, muss das Kommentarzeichen vor der Zeile entfernt werden.

Anschliessend Tomcat neu starten:

sudo /etc/init.d/tomcat6 restart

Viel Spass mit Tomcat, Java und MySQL 😉