continuous integration mit jenkins

Post on 28-May-2015

7.945 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

CONTINUOUS INTEGRATION MIT JENKINS

Web DevCon 2011InterContinental Hotel, Hamburg

17. Oktober 2011

DANTEALIGHIERI

* 1265✝ 1321

DieGöttlicheKomödie

Dante Alighieri

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

DAS WAR 1320 A.D.

WIR HABEN 2011.

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

SPÄTINTEGRIERER KOMMEN IN DIE

INTEGRATIONSHÖLLE

SIE WOLLEN NICHT MEHR IN DIE INTEGRATIONSHÖLLE?

Jenkins

STEPHAN SCHMIDT

Head of Web Sales Development bei der 1&1

Internet AG

PHP seit 1999

Autor & Redner

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

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

Tage bis zur Deadline : 20

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline : 20

10

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

5

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

Tage bis zur Deadline :

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

dev

integrate

Tage bis zur Deadline :

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

devde

ploy

integrate

Tage bis zur Deadline :

0

dev

WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?

devde

ploy

integrate

Tage bis zur Deadline :

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.

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.

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.

Jenkins ist ihr persönlicher CI Butler.

AUSWEG AUS DER INTEGRATIONSHÖLLE

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkout

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkout

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkoutinfo

AUSWEG AUS DER INTEGRATIONSHÖLLE

com

mit

com

mit

checkoutinfo

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.

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.

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

FERTIG.

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.

ANLEGEN EINES JOBS

ANLEGEN EINES JOBS

ANLEGEN EINES JOBS

STARTEN EINES BUILDS

STARTEN EINES BUILDS

STARTEN EINES BUILDS

STARTEN EINES BUILDS

STARTEN EINES BUILDS

STATUS DES BUILDS

= Erfolgreich

= Instabil

= Fehlgeschlagen

= wird gebaut

= Keine Daten

= Green Balls Plugin

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.

BUILD AUSLÖSER

PROJEKTGESUNDHEIT

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

DER ABLAUF BEI CONTINUOUS INTEGRATION

ProcessBuildCheckout

CHECKOUT

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

• Installiert sind CVS und SVN.

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

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)

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.

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.

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

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 :(

Kann ich sonst noch etwas für Sie tun?

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?

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

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.

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.

CODE METRIKEN

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.

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.

PHP_CODEBROWSER

SONAR

STATIC ANALYSIS COLLECTOR

VERMEIDEN SIE EINENBUILD-STAU.

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.

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.

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.

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

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.

JENKINS BUILD MONITORFÜR FIREFOX

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

JENKINS BUILD MONITORFÜR FIREFOX

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

• Zeigt des Status der Jobs in der Taskleiste an.

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.

HUDSON STATUSFÜR CHROME

HUDSON STATUSFÜR CHROME

IPHONE HELPER

JENKINS UND PHP

Diese Aufgabe übernimmt Sebastian für Sie.

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/

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

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

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/

UND LOS GEHT‘S...

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.

ONE MORE THING...

GROWL NOTIFICATIONS

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.

CHUCK NORRIS PLUGIN

BIG RED BUTTON

EXTREME FEEDBACK BEARS

JENKINS UND NABAZTAG

WER BRICHT DEN BUILD?

MEHR INFORMATIONEN

Theorie & Praxis Praxis Fokus auf PHP

top related