Continuous Integration mit Jenkins

9.791 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
0 Kommentare
10 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
9.791
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
353
Aktionen
Geteilt
0
Downloads
125
Kommentare
0
Gefällt mir
10
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Continuous Integration mit Jenkins

  1. 1. CONTINUOUS INTEGRATION MIT JENKINS Web DevCon 2011 InterContinental Hotel, Hamburg 17. Oktober 2011
  2. 2. DANTEALIGHIERI * 1265 ✝ 1321
  3. 3. Dante Alighieri DieGöttlicheKomödie
  4. 4. DIE ZEHN HÖLLENKREISEVorhölle Die Wollustigen Die DieSchlemmer Verschwender Die Zornigen Die Ketzer Die Gewaltätigen Die Mörder & Räuber Die Betrüger Die Verräter
  5. 5. DAS WAR 1320 A.D.
  6. 6. WIR HABEN 2011.
  7. 7. DER ELFTE HÖLLENKREISVorhölle Die Wollustigen Die DieSchlemmer Verschwender Die Zornigen Die Ketzer Die Gewaltätighen Die Mörder & Räuber Die Betrüger Die Verräter Die Spätintegrierer
  8. 8. SPÄTINTEGRIERER KOMMEN IN DIEINTEGRATIONSHÖLLE
  9. 9. SIE WOLLEN NICHT MEHR IN DIE INTEGRATIONSHÖLLE? Jenkins
  10. 10. STEPHAN SCHMIDT Head of Web SalesDevelopment bei der 1&1 Internet AG PHP seit 1999 Autor & Redner
  11. 11. HAB‘S NOCH AUF KEINEEURO-MÜNZE GESCHAFFT :(
  12. 12. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE?
  13. 13. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 20
  14. 14. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 20 dev dev
  15. 15. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 10 dev dev
  16. 16. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 5 dev dev
  17. 17. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 0 dev dev
  18. 18. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 0 dev dev
  19. 19. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 0 dev dev ✘ integrate
  20. 20. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 0 deploy dev dev ✘ integrate
  21. 21. WIE KOMMT MAN IN DIEINTEGRATIONSHÖLLE? Tage bis zur Deadline : 0 deploy dev dev ✘ integrate
  22. 22. 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.
  23. 23. 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.
  24. 24. 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.
  25. 25. Jenkins ist ihrpersönlicher CIButler.
  26. 26. AUSWEG AUS DERINTEGRATIONSHÖLLE
  27. 27. AUSWEG AUS DERINTEGRATIONSHÖLLE mitcom
  28. 28. AUSWEG AUS DERINTEGRATIONSHÖLLE it mit mmcom co
  29. 29. AUSWEG AUS DERINTEGRATIONSHÖLLE it mit mmcom co
  30. 30. AUSWEG AUS DERINTEGRATIONSHÖLLE checkout it mit mmcom co
  31. 31. AUSWEG AUS DERINTEGRATIONSHÖLLE checkout it mit mmcom co
  32. 32. AUSWEG AUS DERINTEGRATIONSHÖLLE checkout it info mit mmcom co
  33. 33. AUSWEG AUS DERINTEGRATIONSHÖLLE checkout it info mit mmcom co
  34. 34. 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.
  35. 35. 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.
  36. 36. 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
  37. 37. FERTIG.
  38. 38. 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.
  39. 39. ANLEGEN EINES JOBS
  40. 40. ANLEGEN EINES JOBS
  41. 41. ANLEGEN EINES JOBS
  42. 42. STARTEN EINES BUILDS
  43. 43. STARTEN EINES BUILDS
  44. 44. STARTEN EINES BUILDS
  45. 45. STARTEN EINES BUILDS
  46. 46. STARTEN EINES BUILDS
  47. 47. STATUS DES BUILDS= Erfolgreich = Green Balls Plugin= Instabil= Fehlgeschlagen= wird gebaut= Keine Daten
  48. 48. 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.
  49. 49. BUILD AUSLÖSER
  50. 50. PROJEKTGESUNDHEIT>80% >60% >40% >20% ≦20%
  51. 51. DER ABLAUF BEICONTINUOUS INTEGRATION Checkout Build Process
  52. 52. CHECKOUT• Jenkins unterstützt verschiedene SCM-Systeme über Plugins.• Installiert sind CVS und SVN.• Weitere können einfach über den Plugin-Manager installiert werden.
  53. 53. 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)
  54. 54. 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.
  55. 55. 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.
  56. 56. 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
  57. 57. 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 :(
  58. 58. Kann ich sonst noch etwas für Sie tun?
  59. 59. 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?
  60. 60. Ihr kostenloserSenior-Entwickler,der rund um die UhrCode-Reviewsmacht.
  61. 61. 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.
  62. 62. 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.
  63. 63. CODE METRIKEN
  64. 64. 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.
  65. 65. 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.
  66. 66. PHP_CODEBROWSER
  67. 67. SONAR
  68. 68. STATIC ANALYSIS COLLECTOR
  69. 69. VERMEIDEN SIE EINEN BUILD-STAU.
  70. 70. 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.
  71. 71. EINFÜHRUNG VONCONTINUOUS 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.
  72. 72. 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.
  73. 73. 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
  74. 74. 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.
  75. 75. JENKINS BUILD MONITOR FÜR FIREFOX• Fügt einen Eintrag in das Firefox-Kontext-Menü hinzu.
  76. 76. JENKINS BUILD MONITOR FÜR FIREFOX• Fügt einen Eintrag in das Firefox-Kontext-Menü hinzu.• Zeigtdes Status der Jobs in der Taskleiste an.
  77. 77. 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.
  78. 78. HUDSON STATUS FÜR CHROME
  79. 79. HUDSON STATUS FÜR CHROME
  80. 80. IPHONE HELPER
  81. 81. JENKINS UND PHP
  82. 82. Diese AufgabeübernimmtSebastian für Sie.
  83. 83. 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/
  84. 84. 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
  85. 85. JENKINS PHP TEMPLATE• Template installieren$ cd $JENKINS_HOME/jobs$ git clone git://github.com/sebastianbergmann/php-jenkins-↵ template.git php-template$ chown -R jenkins:nogroup php-template/• Config neu laden$ java -jar jenkins-cli.jar -s ... reload-configuration
  86. 86. 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/
  87. 87. UND LOS GEHT‘S...
  88. 88. 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.
  89. 89. VIELEN DANK. schst@php.net @schst
  90. 90. ONE MORE THING...
  91. 91. GROWL NOTIFICATIONS
  92. 92. 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.
  93. 93. CHUCK NORRIS PLUGIN
  94. 94. BIG RED BUTTON
  95. 95. EXTREME FEEDBACK BEARS
  96. 96. JENKINS UND NABAZTAG
  97. 97. WER BRICHT DEN BUILD?
  98. 98. MEHR INFORMATIONENTheorie & Praxis Praxis Fokus auf PHP
  99. 99. VIELEN DANK. schst@php.net @schst

×