continuous integration mit jenkins

102
CONTINUOUS INTEGRATION MIT JENKINS Web DevCon 2011 InterContinental Hotel, Hamburg 17. Oktober 2011

Upload: stephan-schmidt

Post on 28-May-2015

7.937 views

Category:

Technology


4 download

DESCRIPTION

Folien meines Vortrags zu Continuous Integration mit Jenkins auf der web Devon 2011 in Hamburg.

TRANSCRIPT

Page 1: Continuous Integration mit Jenkins

CONTINUOUS INTEGRATION MIT JENKINS

Web DevCon 2011InterContinental Hotel, Hamburg

17. Oktober 2011

Page 2: Continuous Integration mit Jenkins

DANTEALIGHIERI

* 1265✝ 1321

Page 3: Continuous Integration mit Jenkins
Page 4: Continuous Integration mit Jenkins

DieGöttlicheKomödie

Dante Alighieri

Page 5: Continuous Integration mit Jenkins
Page 6: Continuous Integration mit Jenkins
Page 7: Continuous Integration mit Jenkins

DIE ZEHN HÖLLENKREISEVorhölle

Die Wollustigen

Die Schlemmer

Die Verschwender

DieZornigen Die

Ketzer

Die Gewaltätigen

Die Mörder & Räuber

DieBetrüger

DieVerräter

Page 8: Continuous Integration mit Jenkins

DAS WAR 1320 A.D.

Page 9: Continuous Integration mit Jenkins

WIR HABEN 2011.

Page 10: Continuous Integration mit Jenkins

DER ELFTE HÖLLENKREISVorhölle

Die Wollustigen

Die Schlemmer

Die Verschwender

DieZornigen Die

Ketzer

DieGewaltätighen Die Mörder &

Räuber

DieBetrüger Die

Verräter

DieSpätintegrierer

Page 11: Continuous Integration mit Jenkins

SPÄTINTEGRIERER KOMMEN IN DIE

INTEGRATIONSHÖLLE

Page 12: Continuous Integration mit Jenkins

SIE WOLLEN NICHT MEHR IN DIE INTEGRATIONSHÖLLE?

Jenkins

Page 13: Continuous Integration mit Jenkins

STEPHAN SCHMIDT

Head of Web Sales Development bei der 1&1

Internet AG

PHP seit 1999

Autor & Redner

Page 14: Continuous Integration mit Jenkins

HAB‘S NOCH AUF KEINE EURO-MÜNZE GESCHAFFT :(

Page 15: Continuous Integration mit Jenkins

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

Page 16: Continuous Integration mit Jenkins

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

Tage bis zur Deadline : 20

Page 17: Continuous Integration mit Jenkins

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline : 20

Page 18: Continuous Integration mit Jenkins

10

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

Page 19: Continuous Integration mit Jenkins

5

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

Page 20: Continuous Integration mit Jenkins

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

Page 21: Continuous Integration mit Jenkins

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

Page 22: Continuous Integration mit Jenkins

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

integrate

Tage bis zur Deadline :

Page 23: Continuous Integration mit Jenkins

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

devde

ploy

integrate

Tage bis zur Deadline :

Page 24: Continuous Integration mit Jenkins

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

devde

ploy

integrate

Tage bis zur Deadline :

Page 25: Continuous Integration mit Jenkins

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

• Es finden parallele Entwicklungen auf einzelnen Rechnern der Mitarbeiter statt.

• Niemand hat alle Änderungen im Blick.

• Kurz vor dem Release-Termin werden alle Änderungen für das nächste Release zusammengeführt.

• Es werden keine automatisierten Tests erstellt.

• Es bleibt keine Zeit mehr, Seiteneffekte zu überprüfen.

Page 26: Continuous Integration mit Jenkins

WIE SIEHT ES IN DER INTEGRATIONSHÖLLE AUS?

• Es ist dunkel, meistens wird bis spät in die Nacht integriert.

• Die Entwickler haben feuerrote Köpfe.

• Schuldzuweisungen sind die einzige Kommunikation.

• Es werden hektisch Bugfixes für die Bugfixes der Bugfixes gemacht.

• Spitze oder harte Gegenstände sollten weggeschlossen werden.

Page 27: Continuous Integration mit Jenkins

WIE ENTKOMMEN SIE DER INTEGRATIONSHÖLLE?

• Erhöhen Sie die Frequenz der Integrationen in Ihrem Projekt.

• Führen Sie für Ihre Applikationen bei jeder Änderung einen vollständigen Build durch.

• Weisen Sie damit jeden Entwickler auf möglichst frühzeitig auf Probleme hin.

• Gefahr erkannt - Gefahr gebannt.

Page 28: Continuous Integration mit Jenkins

Jenkins ist ihr persönlicher CI Butler.

Page 29: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

Page 30: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

Page 31: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

Page 32: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

Page 33: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkout

Page 34: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkout

Page 35: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkoutinfo

Page 36: Continuous Integration mit Jenkins

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkoutinfo

Page 37: Continuous Integration mit Jenkins

JENKINS KANN NICHT ALLES ÜBERNEHMEN...

• Gemeinsame Codebasis und ein SCM sind nötig.

• Der Build muss vollkommen automatisiert funktionieren.

• Ihr Build muss schnell sein.

• Ihre Applikation muss über automatisierte Tests verfügen.

Page 38: Continuous Integration mit Jenkins

VORTEILE VON CONTINUOUS INTEGRATION

• Reduzierung der Risiken.

• Verbesserung der Produktqualität.

• Applikation „funktioniert“ zu jeder Zeit, sie haben jederzeit ein deploy-fähiges Artefakt.

• Konzentration auf das Wesentliche.

• Dokumentierter Build-Prozess.

Page 39: Continuous Integration mit Jenkins

INSTALLATION VON JENKINS

$ mkdir /usr/local/jenkins$ cd /usr/local/jenkins$ wget http://mirrors.jenkins-ci.org/war-stable/latest/↵ jenkins.war

$ export JENKINS_HOME=/usr/local/jenkins$ java -jar jenkins.war

• Downloaden

• Starten

Page 40: Continuous Integration mit Jenkins

FERTIG.

Page 41: Continuous Integration mit Jenkins

JENKINS SPRECH

• Alles, was Jenkins für Sie erledigt, ist ein Job.

• Von jedem Job gibt es mehrere Builds.

• Jeder Build führt zu einem Artefakt.

• Die Builds werden in eine Queue gelegt und von dort abgearbeitet.

Page 42: Continuous Integration mit Jenkins

ANLEGEN EINES JOBS

Page 43: Continuous Integration mit Jenkins

ANLEGEN EINES JOBS

Page 44: Continuous Integration mit Jenkins

ANLEGEN EINES JOBS

Page 45: Continuous Integration mit Jenkins

STARTEN EINES BUILDS

Page 46: Continuous Integration mit Jenkins

STARTEN EINES BUILDS

Page 47: Continuous Integration mit Jenkins

STARTEN EINES BUILDS

Page 48: Continuous Integration mit Jenkins

STARTEN EINES BUILDS

Page 49: Continuous Integration mit Jenkins

STARTEN EINES BUILDS

Page 50: Continuous Integration mit Jenkins

STATUS DES BUILDS

= Erfolgreich

= Instabil

= Fehlgeschlagen

= wird gebaut

= Keine Daten

= Green Balls Plugin

Page 51: Continuous Integration mit Jenkins

WAR DA NICHT WAS MIT „CONTINUOUS“?

• Jenkins kann Builds zu bestimmten Zeiten starten.

• „Nightly Builds“.

• Jenkins kann regelmäßig ihr SCM pollen und den Build dann starten, sobald sich etwas verändert hat.

• Feedback erfolgt in den meisten Fällen per Mail.

• Die Ergebnisse der Builds werden archiviert.

Page 52: Continuous Integration mit Jenkins

BUILD AUSLÖSER

Page 53: Continuous Integration mit Jenkins

PROJEKTGESUNDHEIT

>80% >60% >40% >20% ≦20%

Page 54: Continuous Integration mit Jenkins

DER ABLAUF BEI CONTINUOUS INTEGRATION

ProcessBuildCheckout

Page 55: Continuous Integration mit Jenkins

CHECKOUT

• Jenkins unterstützt verschiedene SCM-Systeme über Plugins.

• Installiert sind CVS und SVN.

• Weitere können einfach über den Plugin-Manager installiert werden.

Page 56: Continuous Integration mit Jenkins

KOMPILIEREN UND SYNTAKTISCHE PRÜFUNG

• Prüfung, ob der Quellcode syntaktische Fehler enthält.

• In einigen Sprachen schon automatisch enthalten, da der Quellcode kompiliert werden muss.

• In anderen Sprachen können Tools eingesetzt werden (z.B. JSLint für JavaScript, php -l für PHP)

Page 57: Continuous Integration mit Jenkins

AUTOMATISIERTE TESTS

• Software kann auf mehreren Ebenen getestet werden.

• Unit-Tests

• Integrationstests

• Akzeptanztests

• Jenkins erzeugt für die meisten xUnit-Frameworks Berichte über Testergebnisse und Testabdeckung.

Page 58: Continuous Integration mit Jenkins

POST-PROCESS SCHRITTE UND BERICHTE

• Jenkins Plugins führen keine Tests aus, erzeugen keine Dokumentationen und erheben keine Metriken.

• Dies muss ihr Build-Prozess leisten.

• Jenkins erstellt „nur“ Berichte oder kopiert und archiviert bereits erstellte Berichte.

• Interessant ist dabei die Entwicklung über die Zeit.

Page 59: Continuous Integration mit Jenkins

DOKUMENTATION GENERIEREN

• Generieren der API-Dokumentation aus dem Quellcode über javadoc, phpDocumentor, DocBlox, etc.

• Jenkins liefert noch weitere Plugins, um zusätzliche Dokumentationen zu erstellen, wie...

• SchemaSpy

• TaskScanner

Page 60: Continuous Integration mit Jenkins

CONTINUOUS INTEGRATION IST NICHT DAS ENDE.

• Syntaktische Prüfung und automatisierte Tests stellen sicher, dass Ihre Applikation funktioniert.

• Aber: Eine Applikation, die funktioniert, ist noch lange keine gute und einfach zu wartende Applikation :(

Page 61: Continuous Integration mit Jenkins

Kann ich sonst noch etwas für Sie tun?

Page 62: Continuous Integration mit Jenkins

CONTINUOUS INSPECTION

• Entspricht mein Code meinen Coding Guidelines?

• Ist mein Code zu kompliziert?

• Enthält mein Code ungenutzte Variablen, Klassen, Parameter?

• Enthält mein Code typische Programmierfehler?

Page 63: Continuous Integration mit Jenkins

Ihr kostenloser Senior-Entwickler, der rund um die Uhr Code-Reviews macht.

Page 64: Continuous Integration mit Jenkins

CODING STANDARDS PRÜFEN

• Verwenden Sie Checkstyle, oder ein Tool, das Checkstyle-kompatible Reports ausgibt, um Ihren Code auf Verletzungen zu prüfen.

• Diese werden direkt von einem Jenkins-Plugin verarbeitet.

• Das Jenkins Plugin „Warnings“ untersucht die Ausgaben im Build nach typischen Warning-Meldungen.

Page 65: Continuous Integration mit Jenkins

METRIKEN ERZEUGEN

• Integrieren Sie verschiedene Tools, die Code-Metriken aus ihrem Quellcode ermitteln:

• Anzahl der Zeilen, Klassen, Comment-Ratio, ...

• Zyklomatische Komplexität

• Ausgabedaten der meisten Tools können von verschiedenen Jenkins-Plugins verarbeitet und visualisiert werden.

Page 66: Continuous Integration mit Jenkins

CODE METRIKEN

Page 67: Continuous Integration mit Jenkins

DUPLIZIERTEN CODE ERKENNEN

• Integrieren Sie Tools, die duplizierten Code erkennen, z.B.

• PHP Copy/Paste Detector

• Die erzeugte XML-Datei kann direkt von einem Jenkins-Plugin verarbeitet werden.

Page 68: Continuous Integration mit Jenkins

ALLES ZUSAMMENFÜHREN

• Jedes der Plugins erstellt einen eigenen Report; bis man alle Metriken gesehen hat, muss man recht häufig klicken.

• Plugins führen die Daten zusammen:

• PHP_CodeBrowser verarbeitet die Logs stellt die Ergebnisse direkt im Sourcecode dar.

• Sonar-Plugin meldet die Daten an Sonar.

• Static Analysis Collector kann für Java eingesetzt werden.

Page 69: Continuous Integration mit Jenkins

PHP_CODEBROWSER

Page 70: Continuous Integration mit Jenkins

SONAR

Page 71: Continuous Integration mit Jenkins

STATIC ANALYSIS COLLECTOR

Page 72: Continuous Integration mit Jenkins

VERMEIDEN SIE EINENBUILD-STAU.

Page 73: Continuous Integration mit Jenkins

HALTEN SIE DIEBUILD-ZEITEN KURZ

• Messen Sie, wie lange ihr Build dauert und suchen Sie nach Wege diesen zu verkürzen, z.B. parallele Ausführung der Code-Metrik-Tools.

• Teilen Sie die Build-Schritte in Einzelbuilds

• Fail-Early, bei syntaktischen Fehlern keine Metriken.

• Langsame Schritte nur im Nightly-Build.

• Bauen Sie nicht jedes Changeset.

Page 74: Continuous Integration mit Jenkins

EINFÜHRUNG VON CONTINUOUS INTEGRATION

• Gehen Sie schrittweise vor, beginnen Sie mit einem Projekt.

• Definieren Sie am Anfang sehr wenige Regeln (z.B. Tests müssen durchlaufen).

• Diese müssen jedoch strikt eingehalten werden.

• Erheben Sie nur die Metriken, die Sie auch verstehen und die für Sie wichtig sind.

Page 75: Continuous Integration mit Jenkins

JENKINS PLUGINS

• Jenkins lässt sich sehr einfach über Plugins erweitern.

• Plugins können einfach über Web-Interface oder CLI-Client installiert werden.

• Aktuell (Stand 11.10) bereits 470 Plugins.

• Mit Plugins ist in Jenkins alles erweiterbar.

Page 76: Continuous Integration mit Jenkins

EIGENE PLUGINS SCHREIBEN

• Plugins werden in Java geschrieben und mit Maven gebaut

• Ein Plugin kann in 60 Sekunden erstellt und gebaut werden.

$ mvn jpi:create// Interaktive Eingabe des Namens

$ mvn jpi:run// Startet Jenkins-Testinstanz mit dem Plugin

$ mvn package// Erstellt installationsfähige HPI-Datei

Page 77: Continuous Integration mit Jenkins

JENKINS REMOTE API

• Jenkins bietet eine XML-, JSON- und Python API an:http://localhost:8080/api/xmlhttp://localhost:8080/api/jsonhttp://localhost:8080/api/python

• Dokumentation zur API gibt es unter :http://localhost:8080/api

• An fast jede URL kann man einfach /api/* anhängen.

Page 78: Continuous Integration mit Jenkins

JENKINS BUILD MONITORFÜR FIREFOX

• Fügt einen Eintrag in das Firefox-Kontext-Menü hinzu.

Page 79: Continuous Integration mit Jenkins

JENKINS BUILD MONITORFÜR FIREFOX

• Fügt einen Eintrag in das Firefox-Kontext-Menü hinzu.

• Zeigt des Status der Jobs in der Taskleiste an.

Page 80: Continuous Integration mit Jenkins

JENKINS BUILD MONITORFÜR FIREFOX

• Fügt einen Eintrag in das Firefox-Kontext-Menü hinzu.

• Zeigt des Status der Jobs in der Taskleiste an.

• Ermöglicht es, Builds direkt aus Firefox anzustoßen.

Page 81: Continuous Integration mit Jenkins

HUDSON STATUSFÜR CHROME

Page 82: Continuous Integration mit Jenkins

HUDSON STATUSFÜR CHROME

Page 83: Continuous Integration mit Jenkins

IPHONE HELPER

Page 84: Continuous Integration mit Jenkins

JENKINS UND PHP

Page 85: Continuous Integration mit Jenkins

Diese Aufgabe übernimmt Sebastian für Sie.

Page 86: Continuous Integration mit Jenkins

JENKINS PHP TEMPLATE

• Entwickelt von Sebastian Bergmann.

• Stellt eine fertige Konfiguration für eine PHP-basierten Jenkins Job zur Verfügung.

• Auf der Website findet man gleich noch ein Ant-Build-Skript für PHP-Projekte.

http://jenkins-php.org/

Page 87: Continuous Integration mit Jenkins

INSTALLATION DER PLUGINS

$ wget http://localhost:8080/jnlpJars/jenkins-cli.jar$ java -jar jenkins-cli.jar -s ... install-plugin checkstyle$ java -jar jenkins-cli.jar -s ... install-plugin cloverphp$ java -jar jenkins-cli.jar -s ... install-plugin dry$ java -jar jenkins-cli.jar -s ... install-plugin htmlpublisher$ java -jar jenkins-cli.jar -s ... install-plugin jdepend$ java -jar jenkins-cli.jar -s ... install-plugin plot$ java -jar jenkins-cli.jar -s ... install-plugin pmd$ java -jar jenkins-cli.jar -s ... install-plugin violations$ java -jar jenkins-cli.jar -s ... install-plugin xunit$ java -jar jenkins-cli.jar -s ... safe-restart

Page 88: Continuous Integration mit Jenkins

JENKINS PHP TEMPLATE

$ cd $JENKINS_HOME/jobs$ git clone git://github.com/sebastianbergmann/php-jenkins-↵ template.git php-template$ chown -R jenkins:nogroup php-template/

• Template installieren

$ java -jar jenkins-cli.jar -s ... reload-configuration

• Config neu laden

Page 89: Continuous Integration mit Jenkins

TOOLS FÜR DAS PROJEKT

$ pear config-set auto_discover 1$ pear install pear.phpqatools.org/phpqatools PHPDocumentor

• Verschiedene QA-Tools installieren

• ant-basiertes Build-File von der Website runterladen.

• Komplettes Beispiel-Projekt ist auf GitHub verfügbar

https://github.com/thePHPcc/bankaccount/

Page 90: Continuous Integration mit Jenkins

UND LOS GEHT‘S...

Page 91: Continuous Integration mit Jenkins

ENTHALTEN IM TEMPLATE

• Syntaktische Analyse mit „php -l“

• Ausführen von PHPUnit-Tests.

• API-Dokumentation mit phpDocumentor

• Metriken mit phploc PHP_Depend.

• Coding Standard Violations mit PHP_CodeSniffer und PHP Mess Detector

• Duplizierter Code mit PHP Copy/Paste Detector.

• Zusammenfassung über PHP_CodeBrowser.

Page 93: Continuous Integration mit Jenkins

ONE MORE THING...

Page 94: Continuous Integration mit Jenkins

GROWL NOTIFICATIONS

Page 95: Continuous Integration mit Jenkins

CONTINUOUS INTEGRATION GAME

• Benutzer bekommen Pluspunkte für erfolgreiche Builds und Minuspunkte für fehlgeschlagene Builds.

• Ergebnisse der statischen Analyse können auch mit einfließen.

Page 96: Continuous Integration mit Jenkins

CHUCK NORRIS PLUGIN

Page 97: Continuous Integration mit Jenkins

BIG RED BUTTON

Page 98: Continuous Integration mit Jenkins

EXTREME FEEDBACK BEARS

Page 99: Continuous Integration mit Jenkins

JENKINS UND NABAZTAG

Page 100: Continuous Integration mit Jenkins

WER BRICHT DEN BUILD?

Page 101: Continuous Integration mit Jenkins

MEHR INFORMATIONEN

Theorie & Praxis Praxis Fokus auf PHP