Continuous Integration /
Deployment
mit Jenkins CI
Webmontag am Dienstag
Schwerin, 19.11.2013
FLORIAN
BOSSELMANN
Head of PHP/Frontend
Software Development
@Silpion Hamburg
florian@ultradigital.de
skype: flobo79
Disclaimer
1. Manche Darstellungen sind überspitzt
2. Ich bin kein Entwickler, sondern bekomme
so mit was geht :)
3. Ich hafte für nix
Die Integrations-Hölle
oder anders:

Wer hat meine Datei
überschrieben?
(Erinnung: einmal zu Stefan Schmidt winken)

Fragen wer einen Integrations Prozess hat?
Die Integrations-Hölle
1. mehrere Entwickler arbeiten unversioniert am Code
2. sprechen sich mündlich ab (oder über Klebebacker)
3. arbeiten auf unterschiedlichen Plattformen
4. Änderungen werden händisch zusammengeführt
5. Danach wird der unveränderte Teil nicht getestet
6. Man hofft und vermutet, zB. dass mein Code von
gestern noch nicht überschrieben wurde
Die Integrations-Hölle
1. mehrere Entwickler operieren am offenen Herzen
2. sprechen sich mündlich ab
3. arbeiten auf unterschiedlichen Plattformen
4. Änderungen werden händisch zusammengeführt
5. Danach wird der unveränderte Teil nicht getestet
6. Man hofft und vermutet, zB dass mein Code von
gestern noch da ist
Fatal error: Class 'User' not found in /Users/flobo/Webserver/
queske/app/mvc/controller/BaseController.php on line 23
Und wie kommt man in die
Deployment Hölle?
Und wie kommt man in die
Deployment Hölle?
1. ganz klar: per FTP Upload ;)
Und wie kommt man in die
Deployment Hölle?
1. ganz klar: per FTP Upload ;)
2. Files Manuell auf Zielsystem übertragen
3. keine/abweichende lokale Entwicklungsumgebung
4. keine Tests durchgeführt
5. FTP Client hat Eigenwillen
6. Jemand hat bereits die selbe Datei verändert
7. Upload von 3271 Dateien bricht ab ... irgendwo
8. Upload bricht ab, Datei leer
9. statt index_test.php wird delete_db.php in
index.php umbenannt
Die Folge
Projekt kaputt
Keine Kunden mehr
Armut
Soziale Ausgrenzung
...
die Hölle!
Wie entkommt man der
Integrations und Deployment
Hölle?
Wie entkommt man der
Integrations und Deployment
Hölle?

Mit einer Integrations- und
Deployment Strategie!
Integrations- und
Deployment Strategie!
1. Unit Tests schreiben / durchführen
2. Versionskontrolle und Branching nutzen
3. Code-Review/Pair Programming (Semantik, Bugs etc)
4. Coding-Richtlinien und Definitions of Done einhalten
5. Datenbank Schema testen und updaten
6. APIs und Infrastruktur testen
7. Kompletter „Build“ der Software
8. Symlinks kontrollieren
9. Selenium / Frontent-Tests durchführen
X. Rollback des Deploys bei Problemen
Integrations- und
Deployment Strategie!
Das alles bei jeder Änderung?
Oder beim finalen Ausliefern?
Integrations- und
Deployment Strategie!

Ja bei jeder Änderung, die „fertig programmiert ist“
Darf ich vorstellen?
Der neue Senior Entwickler
Tester
Integrator
Reporter
Team Player
Jenkins
Hauptfunktion ist
1. Automtisches kontinuierliches „bauen“ von Software
2. Überwachung von kontinuierlichen Prozessen
- wie APIs, Cron-Scripten, Builds
Jenkins
1. Unit Tests durchführen und Auswerten
2. Code-Reviews durchführen (Semantik, Stil, Probleme..)
3. Einhaltung von Coding-Richtlinien prüfen
4. Datenbanken prüfen / updaten / zurücksetzen
5. System und Netzwerk Checks
6. Bauen der Software
7. Managen von Symlinks (Revolving Deploys)
8. Frontend / Regression-Tests durchführen
9. Projektgesundheit überwachen
10. Chuck Norris Witze machen
Jenkins
Und das wars?
Jenkins
11. Integration mit Paas/IaaS/SaaS Systemen wie
Cloudbees, Soucelabs, Amazon AWS
12. Managen von Infrastruktur
13. Überwachen von Systemprozessen
14. Integration über Jenkins Remote API

u name it!
Derzeit ca 850 Plugins verfügbar - 2011 waren es 400
Und die Vorteile?
ja .. was könnte das wohl sein :)
Und die Vorteile?
Für Entwickler
1. Syntaktische Prüfung des Codes (Checkstyle, JSLint,
PHP -l, etc)
2. Fehler-Reports bei Problemen
3. Unterstützung bei Einhaltung von Konventionen
4. Überblick über die Projekte per Build Monitor
5. Reduzierung der typischen Fehler
6. keine nervigen manuellen Roboter-Aktivitäten
8. Kann sich auf das Coden konzentrieren
9. Braucht kein schlechtes Gewissen zu haben
Und die Vorteile?
Für Projektleiter / POs

1. Harmonisierung von Prozessen
2. Zuversichtlichkeit bei Projekten
3. Steigerung der Produktivität und Qualität
4. Metriken zum Verfolgen des Projektverlaufes
5. Unterstützung im Agilen Entwicklungsprozess
6. Bessere Transparenz / Auskunftsfähigkeit
Und die Vorteile?
Für Kunden

1. Frühe Testbarkeit von Produkt-Fragmenten
2. Zuversichtlichkeit beim Projektverlauf
3. Höhere Qualität des Endproduktes
4. Weniger Post-Launch-Schmerzen
5. Besseres Produkt durch früheren Proof-Of-Concept
6. Bessere Zahlungsmoral
Ok, will haben, was muss
ich tun?
Vorraussetzungen
1. kompletter Code in VCS (Git, SVN)
2. Entwickler branchen ihr Feature
3. automatischer Integrations- und Deployment-Prozess
4. Build und Testprozess muss schnell sein
5. Tests müssen existieren (Unit, Behaviour, Frontend)
6. Infrastruktur muss voll remote-administrierbar sein
7. Offline-Repos für eigene Forks oder bei Firewalls (Satis)
Beste Freunde
1. Agile Software Entwicklung
2. TDD / BDD
3. GIT / GitHub
4. Automatische Spielfreunde wie Vagrant, Puppet,
Capistrano, Chef)
Live Demo?

1. Live Demo nächstes Mal
2. ggf. an einem echten Beispiel
Vielen Dank!

Continuous Integration / Deployment mit Jenkins CI

  • 1.
    Continuous Integration / Deployment mitJenkins CI Webmontag am Dienstag Schwerin, 19.11.2013
  • 2.
    FLORIAN BOSSELMANN Head of PHP/Frontend SoftwareDevelopment @Silpion Hamburg florian@ultradigital.de skype: flobo79
  • 3.
    Disclaimer 1. Manche Darstellungensind überspitzt 2. Ich bin kein Entwickler, sondern bekomme so mit was geht :) 3. Ich hafte für nix
  • 4.
    Die Integrations-Hölle oder anders: Werhat meine Datei überschrieben? (Erinnung: einmal zu Stefan Schmidt winken) Fragen wer einen Integrations Prozess hat?
  • 5.
    Die Integrations-Hölle 1. mehrereEntwickler arbeiten unversioniert am Code 2. sprechen sich mündlich ab (oder über Klebebacker) 3. arbeiten auf unterschiedlichen Plattformen 4. Änderungen werden händisch zusammengeführt 5. Danach wird der unveränderte Teil nicht getestet 6. Man hofft und vermutet, zB. dass mein Code von gestern noch nicht überschrieben wurde
  • 6.
    Die Integrations-Hölle 1. mehrereEntwickler operieren am offenen Herzen 2. sprechen sich mündlich ab 3. arbeiten auf unterschiedlichen Plattformen 4. Änderungen werden händisch zusammengeführt 5. Danach wird der unveränderte Teil nicht getestet 6. Man hofft und vermutet, zB dass mein Code von gestern noch da ist Fatal error: Class 'User' not found in /Users/flobo/Webserver/ queske/app/mvc/controller/BaseController.php on line 23
  • 7.
    Und wie kommtman in die Deployment Hölle?
  • 8.
    Und wie kommtman in die Deployment Hölle? 1. ganz klar: per FTP Upload ;)
  • 9.
    Und wie kommtman in die Deployment Hölle? 1. ganz klar: per FTP Upload ;) 2. Files Manuell auf Zielsystem übertragen 3. keine/abweichende lokale Entwicklungsumgebung 4. keine Tests durchgeführt 5. FTP Client hat Eigenwillen 6. Jemand hat bereits die selbe Datei verändert 7. Upload von 3271 Dateien bricht ab ... irgendwo 8. Upload bricht ab, Datei leer 9. statt index_test.php wird delete_db.php in index.php umbenannt
  • 10.
    Die Folge Projekt kaputt KeineKunden mehr Armut Soziale Ausgrenzung ... die Hölle!
  • 11.
    Wie entkommt mander Integrations und Deployment Hölle?
  • 12.
    Wie entkommt mander Integrations und Deployment Hölle? Mit einer Integrations- und Deployment Strategie!
  • 13.
    Integrations- und Deployment Strategie! 1.Unit Tests schreiben / durchführen 2. Versionskontrolle und Branching nutzen 3. Code-Review/Pair Programming (Semantik, Bugs etc) 4. Coding-Richtlinien und Definitions of Done einhalten 5. Datenbank Schema testen und updaten 6. APIs und Infrastruktur testen 7. Kompletter „Build“ der Software 8. Symlinks kontrollieren 9. Selenium / Frontent-Tests durchführen X. Rollback des Deploys bei Problemen
  • 14.
    Integrations- und Deployment Strategie! Dasalles bei jeder Änderung? Oder beim finalen Ausliefern?
  • 15.
    Integrations- und Deployment Strategie! Jabei jeder Änderung, die „fertig programmiert ist“
  • 16.
    Darf ich vorstellen? Derneue Senior Entwickler Tester Integrator Reporter Team Player
  • 17.
    Jenkins Hauptfunktion ist 1. Automtischeskontinuierliches „bauen“ von Software 2. Überwachung von kontinuierlichen Prozessen - wie APIs, Cron-Scripten, Builds
  • 18.
    Jenkins 1. Unit Testsdurchführen und Auswerten 2. Code-Reviews durchführen (Semantik, Stil, Probleme..) 3. Einhaltung von Coding-Richtlinien prüfen 4. Datenbanken prüfen / updaten / zurücksetzen 5. System und Netzwerk Checks 6. Bauen der Software 7. Managen von Symlinks (Revolving Deploys) 8. Frontend / Regression-Tests durchführen 9. Projektgesundheit überwachen 10. Chuck Norris Witze machen
  • 19.
  • 20.
    Jenkins 11. Integration mitPaas/IaaS/SaaS Systemen wie Cloudbees, Soucelabs, Amazon AWS 12. Managen von Infrastruktur 13. Überwachen von Systemprozessen 14. Integration über Jenkins Remote API u name it! Derzeit ca 850 Plugins verfügbar - 2011 waren es 400
  • 21.
    Und die Vorteile? ja.. was könnte das wohl sein :)
  • 22.
    Und die Vorteile? FürEntwickler 1. Syntaktische Prüfung des Codes (Checkstyle, JSLint, PHP -l, etc) 2. Fehler-Reports bei Problemen 3. Unterstützung bei Einhaltung von Konventionen 4. Überblick über die Projekte per Build Monitor 5. Reduzierung der typischen Fehler 6. keine nervigen manuellen Roboter-Aktivitäten 8. Kann sich auf das Coden konzentrieren 9. Braucht kein schlechtes Gewissen zu haben
  • 23.
    Und die Vorteile? FürProjektleiter / POs 1. Harmonisierung von Prozessen 2. Zuversichtlichkeit bei Projekten 3. Steigerung der Produktivität und Qualität 4. Metriken zum Verfolgen des Projektverlaufes 5. Unterstützung im Agilen Entwicklungsprozess 6. Bessere Transparenz / Auskunftsfähigkeit
  • 24.
    Und die Vorteile? FürKunden 1. Frühe Testbarkeit von Produkt-Fragmenten 2. Zuversichtlichkeit beim Projektverlauf 3. Höhere Qualität des Endproduktes 4. Weniger Post-Launch-Schmerzen 5. Besseres Produkt durch früheren Proof-Of-Concept 6. Bessere Zahlungsmoral
  • 25.
    Ok, will haben,was muss ich tun?
  • 26.
    Vorraussetzungen 1. kompletter Codein VCS (Git, SVN) 2. Entwickler branchen ihr Feature 3. automatischer Integrations- und Deployment-Prozess 4. Build und Testprozess muss schnell sein 5. Tests müssen existieren (Unit, Behaviour, Frontend) 6. Infrastruktur muss voll remote-administrierbar sein 7. Offline-Repos für eigene Forks oder bei Firewalls (Satis)
  • 27.
    Beste Freunde 1. AgileSoftware Entwicklung 2. TDD / BDD 3. GIT / GitHub 4. Automatische Spielfreunde wie Vagrant, Puppet, Capistrano, Chef)
  • 28.
    Live Demo? 1. LiveDemo nächstes Mal 2. ggf. an einem echten Beispiel
  • 29.