7. DIE ZEHN HÖLLENKREISE
Vorhölle
Die
Wollustigen
Die Die
Schlemmer Verschwender
Die
Zornigen Die
Ketzer
Die
Gewaltätigen
Die Mörder &
Räuber
Die
Betrüger
Die
Verräter
10. DER ELFTE HÖLLENKREIS
Vorhölle
Die
Wollustigen
Die Die
Schlemmer Verschwender
Die
Zornigen Die
Ketzer
Die
Gewaltätighen Die Mörder &
Räuber
Die
Betrüger Die
Verräter
Die
Spätintegrierer
16. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 20
17. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 20
dev dev
18. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 10
dev dev
19. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 5
dev dev
20. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 0
dev dev
21. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 0
dev dev
22. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 0
dev dev
✘
integrate
23. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 0
deploy dev
dev
✘
integrate
24. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
Tage bis zur Deadline : 0
deploy dev
dev
✘
integrate
25. WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
• Esfinden parallele Entwicklungen auf einzelnen Rechnern der
Mitarbeiter statt.
• Niemand hat alle Änderungen im Blick.
• Kurzvor 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.
26. 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.
27. 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.
• WeisenSie damit jeden Entwickler auf möglichst frühzeitig auf
Probleme hin.
• Gefahr erkannt - Gefahr gebannt.
37. 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.
38. 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.
39. INSTALLATION VON JENKINS
• Downloaden
$ mkdir /usr/local/jenkins
$ cd /usr/local/jenkins
$ wget http://mirrors.jenkins-ci.org/war-stable/latest/↵
jenkins.war
• Starten
$ export JENKINS_HOME=/usr/local/jenkins
$ java -jar jenkins.war
41. 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.
• DieBuilds werden in eine Queue gelegt und von dort
abgearbeitet.
50. STATUS DES BUILDS
= Erfolgreich = Green Balls
Plugin
= Instabil
= Fehlgeschlagen
= wird gebaut
= Keine Daten
51. WAR DA NICHT WAS MIT
„CONTINUOUS“?
• Jenkins kann Builds zu bestimmten Zeiten starten.
• „Nightly Builds“.
• Jenkinskann 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.
55. CHECKOUT
• Jenkins unterstützt verschiedene SCM-Systeme über Plugins.
• Installiert sind CVS und SVN.
• Weitere können einfach über den Plugin-Manager installiert
werden.
56. 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.
• Inanderen Sprachen können Tools eingesetzt werden (z.B.
JSLint für JavaScript, php -l für PHP)
57. 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.
58. 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.
• Jenkinserstellt „nur“ Berichte oder kopiert und archiviert
bereits erstellte Berichte.
• Interessant ist dabei die Entwicklung über die Zeit.
59. 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
60. 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 :(
64. 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.
65. 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.
67. DUPLIZIERTEN CODE
ERKENNEN
• Integrieren Sie Tools, die duplizierten Code erkennen, z.B.
• PHP Copy/Paste Detector
• Dieerzeugte XML-Datei kann direkt von einem Jenkins-Plugin
verarbeitet werden.
68. 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.
73. HALTEN SIE DIE
BUILD-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.
74. EINFÜHRUNG VON
CONTINUOUS INTEGRATION
• Gehen Sie schrittweise vor, beginnen Sie mit einem Projekt.
• DefinierenSie 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.
75. 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.
76. 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
77. JENKINS REMOTE API
• Jenkins bietet eine XML-, JSON- und Python API an:
http://localhost:8080/api/xml
http://localhost:8080/api/json
http://localhost:8080/api/python
• Dokumentation zur API gibt es unter:
http://localhost:8080/api
• An fast jede URL kann man einfach /api/* anhängen.
78. JENKINS BUILD MONITOR
FÜR FIREFOX
• Fügt einen Eintrag in das
Firefox-Kontext-Menü hinzu.
79. JENKINS BUILD MONITOR
FÜR FIREFOX
• Fügt einen Eintrag in das
Firefox-Kontext-Menü hinzu.
• Zeigtdes Status der Jobs in
der Taskleiste an.
80. JENKINS BUILD MONITOR
FÜR FIREFOX
• Fügt einen Eintrag in das
Firefox-Kontext-Menü hinzu.
• Zeigtdes Status der Jobs in
der Taskleiste an.
• Ermöglicht es, Builds direkt
aus Firefox anzustoßen.
86. 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/
89. TOOLS FÜR DAS PROJEKT
• Verschiedene QA-Tools installieren
$ pear config-set auto_discover 1
$ pear install pear.phpqatools.org/phpqatools PHPDocumentor
• ant-basiertes Build-File von der Website runterladen.
• Komplettes Beispiel-Projekt ist auf GitHub verfügbar
https://github.com/thePHPcc/bankaccount/
91. ENTHALTEN IM TEMPLATE
• Syntaktische Analyse mit • CodingStandard Violations
„php -l“ mit PHP_CodeSniffer und
PHP Mess Detector
• Ausführen von PHPUnit-
Tests. • Duplizierter
Code mit PHP
Copy/Paste Detector.
• API-Dokumentation mit
phpDocumentor • Zusammenfassung
über
PHP_CodeBrowser.
• Metriken
mit phploc
PHP_Depend.
95. CONTINUOUS INTEGRATION
GAME
• Benutzer bekommen
Pluspunkte für
erfolgreiche Builds und
Minuspunkte für
fehlgeschlagene Builds.
• Ergebnisseder statischen
Analyse können auch mit
einfließen.