SlideShare ist ein Scribd-Unternehmen logo
CONTINUOUS INTEGRATION
      MIT JENKINS
           Web DevCon 2011
     InterContinental Hotel, Hamburg

            17. Oktober 2011
DANTE
ALIGHIERI
   * 1265
   ✝ 1321
Continuous Integration mit Jenkins
Dante Alighieri


  Die
Göttliche
Komödie
Continuous Integration mit Jenkins
Continuous Integration mit Jenkins
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
DAS WAR 1320 A.D.
WIR HABEN 2011.
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
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
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   20




   dev                                  dev
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   10




   dev                                  dev
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   5




   dev                                 dev
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   0




   dev                                 dev
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   0




   dev                                 dev
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   0




   dev                                 dev

                  ✘
               integrate
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   0




                      deploy           dev
   dev
                  ✘
               integrate
WIE KOMMT MAN IN DIE
INTEGRATIONSHÖLLE?
         Tage bis zur Deadline :   0




                      deploy           dev
   dev
                  ✘
               integrate
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.
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.

• WeisenSie 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
   mit
com
AUSWEG AUS DER
INTEGRATIONSHÖLLE

               it
   mit


            mm
com



         co
AUSWEG AUS DER
INTEGRATIONSHÖLLE

               it
   mit


            mm
com



         co
AUSWEG AUS DER
INTEGRATIONSHÖLLE
                    checkout
               it
   mit


            mm
com



         co
AUSWEG AUS DER
INTEGRATIONSHÖLLE
                    checkout
               it
   mit


            mm
com



         co
AUSWEG AUS DER
INTEGRATIONSHÖLLE
                    checkout
               it




                               info
   mit


            mm
com



         co
AUSWEG AUS DER
INTEGRATIONSHÖLLE
                    checkout
               it




                               info
   mit


            mm
com



         co
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

• 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
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.

• DieBuilds 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      = Green Balls
                     Plugin
= Instabil

= Fehlgeschlagen

= wird gebaut

= Keine Daten
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.
BUILD AUSLÖSER
PROJEKTGESUNDHEIT




>80%   >60%   >40%   >20%   ≦20%
DER ABLAUF BEI
CONTINUOUS INTEGRATION



   Checkout   Build   Process
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.

• Inanderen 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.

• Jenkinserstellt „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

• Dieerzeugte 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 EINEN
    BUILD-STAU.
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.
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.
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/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.
JENKINS BUILD MONITOR
           FÜR FIREFOX

• Fügt einen Eintrag in das
 Firefox-Kontext-Menü hinzu.
JENKINS BUILD MONITOR
           FÜR FIREFOX

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

• Zeigtdes Status der Jobs in
 der Taskleiste an.
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.
HUDSON STATUS
 FÜR CHROME
HUDSON STATUS
 FÜ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

• 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
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/
UND LOS GEHT‘S...
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.
VIELEN DANK.
   schst@php.net
       @schst
ONE MORE THING...
GROWL NOTIFICATIONS
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.
CHUCK NORRIS PLUGIN
BIG RED BUTTON
EXTREME FEEDBACK BEARS
JENKINS UND NABAZTAG
WER BRICHT DEN BUILD?
MEHR INFORMATIONEN
Theorie & Praxis   Praxis   Fokus auf PHP
VIELEN DANK.
   schst@php.net
       @schst

Weitere ähnliche Inhalte

Andere mochten auch

Quo vadis DevOps
Quo vadis DevOpsQuo vadis DevOps
Quo vadis DevOps
cusy GmbH
 
Verdi präsentation stuttgart
Verdi präsentation stuttgartVerdi präsentation stuttgart
Verdi präsentation stuttgart
Werner Drizhal
 
Feedbackzusammenfassung Ohne Trainer Innen
Feedbackzusammenfassung Ohne Trainer InnenFeedbackzusammenfassung Ohne Trainer Innen
Feedbackzusammenfassung Ohne Trainer Innen
Werner Drizhal
 
Angelo gpa bundesvorstand november 2011
Angelo gpa bundesvorstand november 2011Angelo gpa bundesvorstand november 2011
Angelo gpa bundesvorstand november 2011
Werner Drizhal
 
CodingBattle @ Socialbar #ffm 10/03/10
CodingBattle @ Socialbar #ffm 10/03/10CodingBattle @ Socialbar #ffm 10/03/10
CodingBattle @ Socialbar #ffm 10/03/10
Wolfgang Weicht
 
Presseunterlage krisenschulden sept2010
Presseunterlage krisenschulden sept2010Presseunterlage krisenschulden sept2010
Presseunterlage krisenschulden sept2010
Werner Drizhal
 
Cusy Developer-Baukasten
Cusy Developer-BaukastenCusy Developer-Baukasten
Cusy Developer-Baukasten
cusy GmbH
 
GWS - Wozu Soziale Netzwerke
GWS -  Wozu Soziale NetzwerkeGWS -  Wozu Soziale Netzwerke
GWS - Wozu Soziale Netzwerke
Werner Drizhal
 
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
Werner Drizhal
 
Wie man den kreativen Todeskampf übersteht ...
Wie man den kreativen Todeskampf übersteht ...Wie man den kreativen Todeskampf übersteht ...
Wie man den kreativen Todeskampf übersteht ...
Wolfgang Weicht
 
Jahresbericht Science Park Graz
Jahresbericht Science Park GrazJahresbericht Science Park Graz
Jahresbericht Science Park Graz
Bernhard Weber
 
Republiek van de Rio Grande
Republiek van de Rio GrandeRepubliek van de Rio Grande
Republiek van de Rio Grande
Stijn_B
 
Real-Time-Branding - Marken im Echtzeitweb
Real-Time-Branding - Marken im EchtzeitwebReal-Time-Branding - Marken im Echtzeitweb
Real-Time-Branding - Marken im Echtzeitweb
Nico Zorn
 
AHMED HAMDI%27S PORTFOLIO
AHMED HAMDI%27S PORTFOLIOAHMED HAMDI%27S PORTFOLIO
AHMED HAMDI%27S PORTFOLIO
Ahmed Hamdi
 
Doenges CATALOG קטלוג דונגס
Doenges  CATALOG  קטלוג דונגסDoenges  CATALOG  קטלוג דונגס
Doenges CATALOG קטלוג דונגס
gutman barzilai company
 
Facebook marketing leitfaden_fanseiten
Facebook marketing leitfaden_fanseitenFacebook marketing leitfaden_fanseiten
Facebook marketing leitfaden_fanseiten
slubritz
 
Fotoprotokoll 62 A Und 63 A
Fotoprotokoll 62 A Und 63 AFotoprotokoll 62 A Und 63 A
Fotoprotokoll 62 A Und 63 A
Werner Drizhal
 

Andere mochten auch (20)

Quo vadis DevOps
Quo vadis DevOpsQuo vadis DevOps
Quo vadis DevOps
 
Verdi präsentation stuttgart
Verdi präsentation stuttgartVerdi präsentation stuttgart
Verdi präsentation stuttgart
 
Feedbackzusammenfassung Ohne Trainer Innen
Feedbackzusammenfassung Ohne Trainer InnenFeedbackzusammenfassung Ohne Trainer Innen
Feedbackzusammenfassung Ohne Trainer Innen
 
Angelo gpa bundesvorstand november 2011
Angelo gpa bundesvorstand november 2011Angelo gpa bundesvorstand november 2011
Angelo gpa bundesvorstand november 2011
 
CodingBattle @ Socialbar #ffm 10/03/10
CodingBattle @ Socialbar #ffm 10/03/10CodingBattle @ Socialbar #ffm 10/03/10
CodingBattle @ Socialbar #ffm 10/03/10
 
Presseunterlage krisenschulden sept2010
Presseunterlage krisenschulden sept2010Presseunterlage krisenschulden sept2010
Presseunterlage krisenschulden sept2010
 
Cusy Developer-Baukasten
Cusy Developer-BaukastenCusy Developer-Baukasten
Cusy Developer-Baukasten
 
GWS - Wozu Soziale Netzwerke
GWS -  Wozu Soziale NetzwerkeGWS -  Wozu Soziale Netzwerke
GWS - Wozu Soziale Netzwerke
 
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
Gesundheitsreform, gpa djp bundesvorstand 31.5.2012
 
Wie man den kreativen Todeskampf übersteht ...
Wie man den kreativen Todeskampf übersteht ...Wie man den kreativen Todeskampf übersteht ...
Wie man den kreativen Todeskampf übersteht ...
 
Jahresbericht Science Park Graz
Jahresbericht Science Park GrazJahresbericht Science Park Graz
Jahresbericht Science Park Graz
 
Republiek van de Rio Grande
Republiek van de Rio GrandeRepubliek van de Rio Grande
Republiek van de Rio Grande
 
Real-Time-Branding - Marken im Echtzeitweb
Real-Time-Branding - Marken im EchtzeitwebReal-Time-Branding - Marken im Echtzeitweb
Real-Time-Branding - Marken im Echtzeitweb
 
phbs
phbsphbs
phbs
 
AHMED HAMDI%27S PORTFOLIO
AHMED HAMDI%27S PORTFOLIOAHMED HAMDI%27S PORTFOLIO
AHMED HAMDI%27S PORTFOLIO
 
Br mitglied
Br mitgliedBr mitglied
Br mitglied
 
Doenges CATALOG קטלוג דונגס
Doenges  CATALOG  קטלוג דונגסDoenges  CATALOG  קטלוג דונגס
Doenges CATALOG קטלוג דונגס
 
Facebook marketing leitfaden_fanseiten
Facebook marketing leitfaden_fanseitenFacebook marketing leitfaden_fanseiten
Facebook marketing leitfaden_fanseiten
 
Bmlvs profi heer
Bmlvs profi heerBmlvs profi heer
Bmlvs profi heer
 
Fotoprotokoll 62 A Und 63 A
Fotoprotokoll 62 A Und 63 AFotoprotokoll 62 A Und 63 A
Fotoprotokoll 62 A Und 63 A
 

Ähnlich wie Continuous Integration mit Jenkins

Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neu
Cédric Hüsler
 
Advanced Continuous Integration
Advanced Continuous IntegrationAdvanced Continuous Integration
Advanced Continuous Integration
OPITZ CONSULTING Deutschland
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
Stephan Schmidt
 
App-Delivery-Pipeline
App-Delivery-PipelineApp-Delivery-Pipeline
App-Delivery-Pipeline
OPEN KNOWLEDGE GmbH
 
How-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhauptHow-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhaupt
Bokowsky + Laymann GmbH
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
OPEN KNOWLEDGE GmbH
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
Stephan Kaps
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
Robin Sedlaczek
 
How-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhauptHow-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhaupt
Bokowsky + Laymann GmbH
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
Mayflower GmbH
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei Technosoft
Bart Zwager
 
Einfürung iPhone Entwicklung
Einfürung iPhone EntwicklungEinfürung iPhone Entwicklung
Einfürung iPhone Entwicklung
Stuff Mc
 
Interface Design – Best Practices
Interface Design – Best PracticesInterface Design – Best Practices
Interface Design – Best Practices
Stefan Nitzsche
 
#SUGDE The good, the bad and the ugly Sitecore module
#SUGDE The good, the bad and the ugly Sitecore module#SUGDE The good, the bad and the ugly Sitecore module
#SUGDE The good, the bad and the ugly Sitecore module
chriswoj
 
Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?
OPEN KNOWLEDGE GmbH
 
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
Stephan Schmidt
 
Java EE meets Microservices
Java EE meets MicroservicesJava EE meets Microservices
Java EE meets Microservices
OPEN KNOWLEDGE GmbH
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
Robin Sedlaczek
 
Kennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developersKennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developers
FDeitelhoff
 
Development in der Cloud-Ära
Development in der Cloud-ÄraDevelopment in der Cloud-Ära
Development in der Cloud-Ära
enpit GmbH & Co. KG
 

Ähnlich wie Continuous Integration mit Jenkins (20)

Day CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neuDay CQ 5.3 WCM - Was ist neu
Day CQ 5.3 WCM - Was ist neu
 
Advanced Continuous Integration
Advanced Continuous IntegrationAdvanced Continuous Integration
Advanced Continuous Integration
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
 
App-Delivery-Pipeline
App-Delivery-PipelineApp-Delivery-Pipeline
App-Delivery-Pipeline
 
How-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhauptHow-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhaupt
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
 
How-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhauptHow-to Video heute: im Web, mobile und überhaupt
How-to Video heute: im Web, mobile und überhaupt
 
JavaScript Days 2015: Security
JavaScript Days 2015: SecurityJavaScript Days 2015: Security
JavaScript Days 2015: Security
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei Technosoft
 
Einfürung iPhone Entwicklung
Einfürung iPhone EntwicklungEinfürung iPhone Entwicklung
Einfürung iPhone Entwicklung
 
Interface Design – Best Practices
Interface Design – Best PracticesInterface Design – Best Practices
Interface Design – Best Practices
 
#SUGDE The good, the bad and the ugly Sitecore module
#SUGDE The good, the bad and the ugly Sitecore module#SUGDE The good, the bad and the ugly Sitecore module
#SUGDE The good, the bad and the ugly Sitecore module
 
Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?
 
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software Entwicklung in Teams wissen sollten
 
Java EE meets Microservices
Java EE meets MicroservicesJava EE meets Microservices
Java EE meets Microservices
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
 
Kennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developersKennen sie schon - Important tools for C# developers
Kennen sie schon - Important tools for C# developers
 
Development in der Cloud-Ära
Development in der Cloud-ÄraDevelopment in der Cloud-Ära
Development in der Cloud-Ära
 

Mehr von Stephan Schmidt

Das Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based ServicesDas Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based Services
Stephan Schmidt
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
Stephan Schmidt
 
Die Kunst des Software Design - Java
Die Kunst des Software Design - JavaDie Kunst des Software Design - Java
Die Kunst des Software Design - Java
Stephan Schmidt
 
Der Erfolgreiche Programmierer
Der Erfolgreiche ProgrammiererDer Erfolgreiche Programmierer
Der Erfolgreiche Programmierer
Stephan Schmidt
 
Die Kunst Des Software Design
Die Kunst Des Software DesignDie Kunst Des Software Design
Die Kunst Des Software Design
Stephan Schmidt
 
Software-Entwicklung Im Team
Software-Entwicklung Im TeamSoftware-Entwicklung Im Team
Software-Entwicklung Im Team
Stephan Schmidt
 
JSON-RPC Proxy Generation with PHP 5
JSON-RPC Proxy Generation with PHP 5JSON-RPC Proxy Generation with PHP 5
JSON-RPC Proxy Generation with PHP 5
Stephan Schmidt
 
Declarative Development Using Annotations In PHP
Declarative Development Using Annotations In PHPDeclarative Development Using Annotations In PHP
Declarative Development Using Annotations In PHP
Stephan Schmidt
 
XML and Web Services with PHP5 and PEAR
XML and Web Services with PHP5 and PEARXML and Web Services with PHP5 and PEAR
XML and Web Services with PHP5 and PEAR
Stephan Schmidt
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
Stephan Schmidt
 
Go OO! - Real-life Design Patterns in PHP 5
Go OO! - Real-life Design Patterns in PHP 5Go OO! - Real-life Design Patterns in PHP 5
Go OO! - Real-life Design Patterns in PHP 5
Stephan Schmidt
 
Component and Event-Driven Architectures in PHP
Component and Event-Driven Architectures in PHPComponent and Event-Driven Architectures in PHP
Component and Event-Driven Architectures in PHP
Stephan Schmidt
 
Session Server - Maintaing State between several Servers
Session Server - Maintaing State between several ServersSession Server - Maintaing State between several Servers
Session Server - Maintaing State between several Servers
Stephan Schmidt
 
XML Transformations With PHP
XML Transformations With PHPXML Transformations With PHP
XML Transformations With PHP
Stephan Schmidt
 
PEAR For The Masses
PEAR For The MassesPEAR For The Masses
PEAR For The Masses
Stephan Schmidt
 
Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4
Stephan Schmidt
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
Stephan Schmidt
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHP
Stephan Schmidt
 
PHP im High End
PHP im High EndPHP im High End
PHP im High End
Stephan Schmidt
 
Dynamische Websites mit XML
Dynamische Websites mit XMLDynamische Websites mit XML
Dynamische Websites mit XML
Stephan Schmidt
 

Mehr von Stephan Schmidt (20)

Das Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based ServicesDas Web Wird Mobil - Geolocation und Location Based Services
Das Web Wird Mobil - Geolocation und Location Based Services
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten
 
Die Kunst des Software Design - Java
Die Kunst des Software Design - JavaDie Kunst des Software Design - Java
Die Kunst des Software Design - Java
 
Der Erfolgreiche Programmierer
Der Erfolgreiche ProgrammiererDer Erfolgreiche Programmierer
Der Erfolgreiche Programmierer
 
Die Kunst Des Software Design
Die Kunst Des Software DesignDie Kunst Des Software Design
Die Kunst Des Software Design
 
Software-Entwicklung Im Team
Software-Entwicklung Im TeamSoftware-Entwicklung Im Team
Software-Entwicklung Im Team
 
JSON-RPC Proxy Generation with PHP 5
JSON-RPC Proxy Generation with PHP 5JSON-RPC Proxy Generation with PHP 5
JSON-RPC Proxy Generation with PHP 5
 
Declarative Development Using Annotations In PHP
Declarative Development Using Annotations In PHPDeclarative Development Using Annotations In PHP
Declarative Development Using Annotations In PHP
 
XML and Web Services with PHP5 and PEAR
XML and Web Services with PHP5 and PEARXML and Web Services with PHP5 and PEAR
XML and Web Services with PHP5 and PEAR
 
The Big Documentation Extravaganza
The Big Documentation ExtravaganzaThe Big Documentation Extravaganza
The Big Documentation Extravaganza
 
Go OO! - Real-life Design Patterns in PHP 5
Go OO! - Real-life Design Patterns in PHP 5Go OO! - Real-life Design Patterns in PHP 5
Go OO! - Real-life Design Patterns in PHP 5
 
Component and Event-Driven Architectures in PHP
Component and Event-Driven Architectures in PHPComponent and Event-Driven Architectures in PHP
Component and Event-Driven Architectures in PHP
 
Session Server - Maintaing State between several Servers
Session Server - Maintaing State between several ServersSession Server - Maintaing State between several Servers
Session Server - Maintaing State between several Servers
 
XML Transformations With PHP
XML Transformations With PHPXML Transformations With PHP
XML Transformations With PHP
 
PEAR For The Masses
PEAR For The MassesPEAR For The Masses
PEAR For The Masses
 
Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4Inroduction to XSLT with PHP4
Inroduction to XSLT with PHP4
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Interprozesskommunikation mit PHP
Interprozesskommunikation mit PHPInterprozesskommunikation mit PHP
Interprozesskommunikation mit PHP
 
PHP im High End
PHP im High EndPHP im High End
PHP im High End
 
Dynamische Websites mit XML
Dynamische Websites mit XMLDynamische Websites mit XML
Dynamische Websites mit XML
 

Continuous Integration mit Jenkins

  • 1. CONTINUOUS INTEGRATION MIT JENKINS Web DevCon 2011 InterContinental Hotel, Hamburg 17. Oktober 2011
  • 2. DANTE ALIGHIERI * 1265 ✝ 1321
  • 4. Dante Alighieri Die Göttliche Komödie
  • 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
  • 11. SPÄTINTEGRIERER KOMMEN IN DIE INTEGRATIONSHÖLLE
  • 12. SIE WOLLEN NICHT MEHR IN DIE INTEGRATIONSHÖLLE? Jenkins
  • 13. STEPHAN SCHMIDT Head of Web Sales Development bei der 1&1 Internet AG PHP seit 1999 Autor & Redner
  • 14. HAB‘S NOCH AUF KEINE EURO-MÜNZE GESCHAFFT :(
  • 15. WIE KOMMT MAN IN DIE INTEGRATIONSHÖLLE?
  • 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.
  • 33. AUSWEG AUS DER INTEGRATIONSHÖLLE checkout it mit mm com co
  • 34. AUSWEG AUS DER INTEGRATIONSHÖLLE checkout it mit mm com co
  • 35. AUSWEG AUS DER INTEGRATIONSHÖLLE checkout it info mit mm com co
  • 36. AUSWEG AUS DER INTEGRATIONSHÖLLE checkout it info mit mm com co
  • 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.
  • 53. PROJEKTGESUNDHEIT >80% >60% >40% >20% ≦20%
  • 54. DER ABLAUF BEI CONTINUOUS INTEGRATION Checkout Build Process
  • 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 :(
  • 61. Kann ich sonst noch etwas für Sie tun?
  • 62. 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?
  • 63. Ihr kostenloser Senior-Entwickler, der rund um die Uhr Code-Reviews macht.
  • 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.
  • 70. SONAR
  • 72. VERMEIDEN SIE EINEN BUILD-STAU.
  • 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/
  • 87. 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
  • 88. 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
  • 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.
  • 92. VIELEN DANK. schst@php.net @schst
  • 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.
  • 100. WER BRICHT DEN BUILD?
  • 101. MEHR INFORMATIONEN Theorie & Praxis Praxis Fokus auf PHP
  • 102. VIELEN DANK. schst@php.net @schst