Posts mit dem Label build werden angezeigt. Alle Posts anzeigen
Posts mit dem Label build werden angezeigt. Alle Posts anzeigen

Mittwoch, 10. Oktober 2007

Maven 2 Einführung

Immer wieder ist man bei Softwarentwicklung mit der Tatsache konfrontiert, dass man sich 70% der Zeit mit Infrastruktur, Entwicklungsumgebung, Applikationsserver und Co. beschäftigt. Man investiert nur 30% der Zeit für die Lösung des eigentlichen Business-Problems. Das eingesetzte Projekt-Budget fliesst demnach mehrheitlich in Dinge, die keinen Mehrwert und keinen direkten ROI zur Folge haben.

Um einen Teil der Infrastruktur-Problem zu minimieren wurde Maven2 entwickelt - ein Build und Projekt-Management Werkzeug.

Die Top 5 Punkte, die für Maven2 sprechen:
  • Einfaches, einheitliches Projekt-Setup, IDE unabhängig
  • keine JAR Files mehr im Source Code Repo
  • keine Ant-Scripts mehr schreiben
  • Einfaches Dependency Management (externe JAR Abhängigkeiten)
  • zentrales Company-Repository zur Wiedervendung von Komponenten
Ein Maven2 Projekt hat man in weniger als 5 Minuten eingerichtet und zwar mit compile, clean, package, test etc. ohne dass mein eine Zeile Ant-Script geschrieben hat. Maven2 basiert auf einen POM.xml File, in welchem das Projekt definiert wird. Durch dieses POM.xml wird die Umgebnung für Maven2 eingerichtet.

Ein sehr gutes Buch (PDF) zum Thema Maven2 ist "Better Builds with Maven" (DevZuz), sehr emfpfehlenswert!

Donnerstag, 30. August 2007

Automatisierter Build und Deployment

Bei agiler Vorgehensweise ist es sehr wichtig, dass sowohl der Kunde als auch das Team immer eine lauffähige Version der Software in einer dedizierten Umgebung einsehen kann, wobei ich mich hier auf Web Applikationen beziehe. Oft kommt noch hinzu, dass man nicht nur den aktuellen Entwicklungsstand, sondern auch den aktuellen und manchmal parallel auch den vorherigen Release plus Tag Version einsehen möchte. 

Wie macht man das?

Es gibt Tools, die einen unterstützten, z.B. Buildix - was allerdings gleich mit dem gesamten Projektmanagement auffährt. Neben Buildix gibt es noch andere Tools, auf die ich hier nicht weiter eingehen möchte.

Es geht auch ohne Tools ganz einfach. Ich bevorzuge für die Staging Umgebung eine Linux Maschine, z.B. CentOS. Hier werden folgende Infrastruktur Tools installiert:
- subversion/cvs client
- maven/ant

Um den Build das Deployment zu automatisieren, schreit man ein Shell-script, z.B.:

#!/bin/bash
REPO="https://svn.company.com/myproject"
ARTIFACTID="webapplication_xyz"
CURRENT_RELEASE=branches/release_1
CURRENT_TAG=tags/release_1-0-0

source $HOME/.bashrc

function deploy_static {
 rm -rf /var/www/myproject
 svn co ${REPO}/${ARTIFACTID}/${CURRENT_RELEASE} /var/www/myproject/release
 svn co ${REPO}/${ARTIFACTID}/${CURRENT_TAG} /var/www/myproject/tag
 svn co ${REPO}/${ARTIFACTID}/trunk /var/www/myproject/trunk
}

if [ "$1" = "" ]; then
 echo "$0 [deploy_static ]"
else
$1 $2
fi

Dieses Script can dann je nach Bedürfnissen so angepasst werden, dass z.B. der JAVA Code compiliert wird und ein WAR file auf dem Tomcat deployed wird. In meinem Beispiel wird lediglich statischer Content auf den Apache deployed.

Im nächsten Post beschreibe ich, wie man das ganze noch automatisiert.