Continuous Integration mit Jenkins
-
Upload
stephan-schmidt -
Category
Technology
-
view
7.937 -
download
4
description
Transcript of Continuous Integration mit Jenkins
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.
VIELEN [email protected]
@schst
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