Continuous Integration mit Hudson

26
Continuous Integration mit Hudson Dr. Christian Betz https://www.xing.com/profle/Christian_Betz http://twitter.com/vizMind » https://hudson.dev.java.net/

description

Präsentation im Rahmen der Java User Group Hamburg (JUGHH.org) zum Thema Hudson und Continuous Integration.Beispiele zum Projekt-Setup.

Transcript of Continuous Integration mit Hudson

Page 1: Continuous Integration mit Hudson

Continuous Integration mit Hudson

Dr. Christian Betzhttps://www.xing.com/profle/Christian_Betz

http://twitter.com/vizMind

» https://hudson.dev.java.net/

Page 2: Continuous Integration mit Hudson

2

Über mich

Studium und Promotion inInformatik an der Uni Würzburg

In Hamburg seit 2005

Geschäftsführer knowIT-Software GmbHSoftware-Architekt bei der Plath GmbH

Page 3: Continuous Integration mit Hudson

3

Continous Integration integriert nicht nur Software-Komponenten

Page 4: Continuous Integration mit Hudson

4Architektur

Page 5: Continuous Integration mit Hudson

5Coding

Page 6: Continuous Integration mit Hudson

6Qualitätssicherung

Page 7: Continuous Integration mit Hudson

7Projektmanagement

Page 8: Continuous Integration mit Hudson

8

Hudson„An extensible continuous integration engine“

Page 9: Continuous Integration mit Hudson

9Hudson einrichten

Page 10: Continuous Integration mit Hudson

10

Starten

» Per WebStart

» java -jar hudson.war

» WAR in WebContainerdeployen

Webbrowser öfnen(per defaulthttp://localhost:8080/)

Page 11: Continuous Integration mit Hudson

11

Konfgurieren

» Browser-basiert:

» System-Konfguration (eMail-Server, Pfade, Environment-Variablen)

» Plugins

» Nodes

» Monitoring

» Skript-Konsole

» XML-basiert

» Während Hudson läuft

Page 12: Continuous Integration mit Hudson

12

„Free Style Software-Projekt“

» Erlaubt die Kombination von „jedem“ Versions-Kontrollsystem (VCS) mit „jedem“ Buildverfahren

» SVN, CVS out-of-the-box

» Maven, ANT, Shell, Batch out-of-the-box, auch beliebige Kombinationen

» Build-Auslöser

» Abhängig von Projekten

» Zeitgesteuert

» Abhängig vom VCS

» Trigger über http-requests

Page 13: Continuous Integration mit Hudson

13

Build-Ergebnisse

» Je nach Projekt baut man unterschiedliche Artefakte

» JARs, WARs

» Installer

» Source-Bundles

» Builds können folgendes Ergebnis haben

» Stable

» Instable (Build läuft durch, aber z.B. Coverage ist unter Schwellwert)

» Failed

» Hudson kann Artefakte selbst archivieren oder fngerprinten

Page 14: Continuous Integration mit Hudson

14Hudson im Einsatz bei Plath

Page 15: Continuous Integration mit Hudson

15

Ein Beispiel-Projekt

» Server-Applikation als WAR

» Deployment in einen JBoss-Cluster

» Eclipse RCP Rich Client

» zu starten per WebStart, verpackt in WAR

» Deployment in den JBoss-Cluster

» Eclipse Online-Hilfe

» WAR mit OSGi-Bundles der Eclipse Hilfe

» Deployment in den Jboss-Cluster

» Client + Integrationstest

» Ausführen auf Windows-Maschine

Page 16: Continuous Integration mit Hudson

16

Continous Build

» Baut nach jedem Check-in

» Projekte werden über Maven gebaut (Multi-Module Projects)

» Eclipse Client wird über Eclipse PDE Build (ANT) integriert

» Build-Ergebnis

» Compilierter Code, wird außerhalb von Hudson nicht weiterverwendet

» Unit-Tests (JUnit)

» Reporting von ToDo, Code Coverage, Checkstyle, FindBugs, PMD

» Email bei Veränderung des Build-Ergebnisses

Page 17: Continuous Integration mit Hudson

17

Nightly Build

» Baut jede Nacht

» Projekte werden über Maven gebaut, anderes Profl

» Eclipse Client wird diesmal signiert und in WebStart-Archiv „verpackt“

» Services, Client-WebStart und Online-Hilfe werden in ein ZIP-File gepackt

» Build-Ergebnis

» Deploybares Artefakt, wird in ein Nexus-Repository „deployt“

» Cleanup der Datenbank (wird neu mit Testdaten gefüllt)

» Deployment per Gant (aus Nexus-Repository) aufJBoss-Cluster, wenn Build vorher erfolgreich

Page 18: Continuous Integration mit Hudson

18

Integration Test

» Baut im Anschluss an erfolgreichen Nightly Build

» Ist gebunden auf einen Windows-Slave

» Führt einen Rich Client + Integrationstest-Bundle aus

» Reporting über Junit

» Zusammenfassen der Testergebnisse von Nightly-Build und Integration Test

Page 19: Continuous Integration mit Hudson

19Hudson erweitern

Page 20: Continuous Integration mit Hudson

20

Plugins

» Hudson hat einen eigenen Plugin-Mechanismus eingebaut (inkl. Updates)

» VCS

» ClearCase, GIT, Mercurial, Perforce

» Build

» Gant, Gradle, Grails, NAnt (.NET), Phing (PHP),rake (Ruby)

Page 21: Continuous Integration mit Hudson

21

Interessante Plugins

» ActiveDirectory

» LDAP Email Plugin

» IssueTracking-Plugins

» Bugzilla

» JIRA

» Trac

» Metriken

» Checkstyle

» Findbugs

» Promoted Build Plugin

» Continous Integration Game

» Messaging

» IRC

» Jabber

» Email

» Twitter

» Deployment

» SCP

» FTP

» Deploy (via Cargo)

Page 22: Continuous Integration mit Hudson

22

Ofene Issues

» Erlaubt Commit von fehlerhaftem Code (anders als z.B. Teamcity)

» Synchronisation der Build-Prozesse in der IDE und auf dem Build-Server

» Vordefnierte Projekttypen noch nicht ausgereift

» Fehlende Plugins für Spezialfälle

» bazaar

Page 23: Continuous Integration mit Hudson

23

Continuous Integration als Schlüssel zum Projekterfolg?

Page 24: Continuous Integration mit Hudson

24

Für Hudson spricht einiges...

» Open Source

» Einfach aufzusetzen

» Leicht zu erweitern (Plugins)

» Einfach zu bedienen

» Sehr stabil

» Verteiltes Bauen möglich

» Permanente URLs (z.B. auf latest-build)

» Auch zum Monitoring externer Jobs geeignet (z.B. Cleanup der Testumgebung)

» File fngerprinting

» Trend reports

Page 25: Continuous Integration mit Hudson

25

… und noch mehr fürContinuous Integration» Kürzere Release-Zyklen

» Fehler werden schneller entdeckt

» Metriken können zentral gemessen werden

» Automatische Changelogs

» Transparenz für alle

Page 26: Continuous Integration mit Hudson

26