This blog has moved to
http://blog.matthias-reining.com

Die bestehenden Artikel bleiben vorerst alle bei blogspot. Neue Artikel veröffentliche ich allerdings nur noch auf http://blog.matthias-reining.com

Donnerstag, 26. März 2009

Continuous Integration mit Hudson - Installationsanleitung (Standalone Konfiguration)

Continuous Integration mit Hudson: tolle Sache. Find ich richtig hübsch….

Um Hudson zu betreiben gibt es jede Menge verschieden Installations- und Konfigurationsmöglichkeiten: Standalone, innerhalb eines Webservers (Tomcat, JBoss, Glassfish), mit davor "geblendeten" Apache, usw.

Anbei eine kleine Anleitung wie ich Hudson eingerichtet habe.
Da ich den aktuellen Entwicklungssnapshot auf der gleichen VM betreibe wie Hudson, habe ich mich für die Standalone Variante von Hudson entschieden. Ich hoffe hierdurch Seiteneffekte zwischen dem Entwicklungsserver (hier JBoss) und Hudson zu reduzieren. Im gemeinsamen Betrieb unter JBoss erhielt ich bspw. PermGen Fehlermeldungen/ OutOfMemory Exceptions die ich so nicht sauber zuordnen konnte (zu ressourcenintensive Hudson Aktivitäten oder ein Speicherleak in der Applikation?).

Vorgaben

OS debian etch
JAVA ist installiert und im PATH

Eigenen User anlegen

i041:~# mkdir /data
i041:~# mkdir /data/hudson
i041:~# addgroup Hudson
Adding group `hudson' (GID 1002) ...
Done.
i041:~# useradd -g 1002 -d /data/hudson -s /bin/bash hudson
i041:~# chown hudson:hudson /data/hudson/

Bei der Useranlage (useradd) muss darauf geachtet werden, dass die GID (Option –g) der GID bei der Gruppenanlage entspricht.
Ggf. jetzt noch ein paar Einstellungen aus dem Lieblingsprofile kopieren, damit die Arbeit dann "schöner" von statten geht.

i041:~# cp /data/jboss/.bashrc /data/hudson/.
i041:~# chown -R hudson:hudson /data/hudson

Die folgenden Tätigkeiten sollten als Hudson User vorgenommen werden

i041:~# su hudson
hudson@i041:/root$ cd
hudson@i041:~$

Hudson Verzeichnis und Startskripte einrichten

hudson@i041:~$ mkdir bin
hudson@i041:~$ mkdir lib
hudson@i041:~$ mkdir log
hudson@i041:~$ cp /tmp/hudson.war lib/

Skript run.sh anlagen

hudson@i041:~/bin$ nano run.sh

#########################
CURRENT_USER=`whoami`
if [ $CURRENT_USER != "hudson" ]; then
echo "Run only valid as hudson user!... (not as $CURRENT_USER)"
exit -1;
fi

export HUDSON_HOME=/data/Hudson
export PATH="/usr/share/apache-ant/latest/bin:$PATH"
export FINDBUGS_HOME=$HUDSON_HOME/externals/findbugs-1.3.8

HTTP_PORT=8280
AJP13_PORT=8209
CONTROL_PORT=-1
LOGFILE=$HUDSON_HOME/log/hudson.log

nohup java -jar $HUDSON_HOME/lib/hudson.war \
--httpPort=$HTTP_PORT \
--ajp13Port=$AJP13_PORT \
--controlPort=$CONTROL_PORT \
> $LOGFILE 2>&1&

#########################

Skript shutdown.sh anlagen

hudson@i041:~/bin$ nano run.sh

#########################
#stop per kill. see http://winstone.sourceforge.net/#security

CURRENT_USER=`whoami`
if [ $CURRENT_USER != "hudson" ]; then
echo "Shutdown only valid as hudson user!... (not as $CURRENT_USER)"
exit -1;
fi

pid=`ps x | grep java | grep hudson | awk '{print $1}'`; kill $pid



#########################

hudson@i041:~/bin$ chmod u+x run.sh
hudson@i041:~/bin$ chmod u+x shutdown.sh

Der Hudson Server kann nun mit run.sh gestartet und mit shutdown.sh gestoppt werden. Damit sich der Hudson Server nicht mit dem JBoss auf der gleichen VM ins Gehege kommt sind die Webports entsprechend abgeändert (siehe Variable HTTP_PORT und AJP13_PORT).
Im Verzeichnis $HUDSON_HOME/log ist das log File enthalten. Falls der Server nicht hochfährt (bspw. ist eventuell der Webport bereits belegt) sollte dieses File auf alle Fälle geprüft werden!

[TODO: FindBugs Integration]

Keine Kommentare:

Kommentar veröffentlichen