Continuous Integration / Deployment mit Jenkins CI

29
Continuous Integration / Deployment mit Jenkins CI Webmontag am Dienstag Schwerin, 19.11.2013

description

Slideshow für den Webmontag am Dienstag am 18.11.2013 in Schwerin. Grober Überblick was CI / CD mit Jenkins ist und welche Vorteile es bietet.

Transcript of Continuous Integration / Deployment mit Jenkins CI

Page 1: Continuous Integration / Deployment mit Jenkins CI

Continuous Integration / Deployment

mit Jenkins CI

Webmontag am DienstagSchwerin, 19.11.2013

Page 2: Continuous Integration / Deployment mit Jenkins CI

FLORIANBOSSELMANN

Head of PHP/Frontend Software Development

@Silpion Hamburg

[email protected]: flobo79

Page 3: Continuous Integration / Deployment mit Jenkins CI

Disclaimer

1. Manche Darstellungen sind überspitzt

2. Ich bin kein Entwickler, sondern bekomme so mit was geht :)

3. Ich hafte für nix

Page 4: Continuous Integration / Deployment mit Jenkins CI

Die Integrations-Hölle

oder anders:

Wer hat meine Datei überschrieben?

(Erinnung: einmal zu Stefan Schmidt winken)

Fragen wer einen Integrations Prozess hat?

Page 5: Continuous Integration / Deployment mit Jenkins CI

Die Integrations-Hölle

1. mehrere Entwickler arbeiten unversioniert am Code 2. sprechen sich mündlich ab (oder über Klebebacker)3. arbeiten auf unterschiedlichen Plattformen4. Änderungen werden händisch zusammengeführt5. Danach wird der unveränderte Teil nicht getestet6. Man hofft und vermutet, zB. dass mein Code von gestern noch nicht überschrieben wurde

Page 6: Continuous Integration / Deployment mit Jenkins CI

Die Integrations-Hölle

1. mehrere Entwickler operieren am offenen Herzen2. sprechen sich mündlich ab3. arbeiten auf unterschiedlichen Plattformen4. Änderungen werden händisch zusammengeführt5. Danach wird der unveränderte Teil nicht getestet6. 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

Page 7: Continuous Integration / Deployment mit Jenkins CI

Und wie kommt man in die Deployment Hölle?

Page 8: Continuous Integration / Deployment mit Jenkins CI

Und wie kommt man in die Deployment Hölle?

1. ganz klar: per FTP Upload ;)

Page 9: Continuous Integration / Deployment mit Jenkins CI

Und wie kommt man in die Deployment Hölle?

1. ganz klar: per FTP Upload ;)2. Files Manuell auf Zielsystem übertragen3. keine/abweichende lokale Entwicklungsumgebung4. keine Tests durchgeführt5. FTP Client hat Eigenwillen6. Jemand hat bereits die selbe Datei verändert7. Upload von 3271 Dateien bricht ab ... irgendwo8. Upload bricht ab, Datei leer9. statt index_test.php wird delete_db.php in index.php umbenannt

Page 10: Continuous Integration / Deployment mit Jenkins CI

Die FolgeProjekt kaputtKeine Kunden mehrArmut Soziale Ausgrenzung ... die Hölle!

Page 11: Continuous Integration / Deployment mit Jenkins CI

Wie entkommt man der Integrations und Deployment

Hölle?

Page 12: Continuous Integration / Deployment mit Jenkins CI

Wie entkommt man der Integrations und Deployment

Hölle?

Mit einer Integrations- und Deployment Strategie!

Page 13: Continuous Integration / Deployment mit Jenkins CI

Integrations- und Deployment Strategie!

1. Unit Tests schreiben / durchführen2. Versionskontrolle und Branching nutzen3. Code-Review/Pair Programming (Semantik, Bugs etc)4. Coding-Richtlinien und Definitions of Done einhalten5. Datenbank Schema testen und updaten6. APIs und Infrastruktur testen7. Kompletter „Build“ der Software 8. Symlinks kontrollieren9. Selenium / Frontent-Tests durchführenX. Rollback des Deploys bei Problemen

Page 14: Continuous Integration / Deployment mit Jenkins CI

Integrations- und Deployment Strategie!

Das alles bei jeder Änderung?

Oder beim finalen Ausliefern?

Page 15: Continuous Integration / Deployment mit Jenkins CI

Integrations- und Deployment Strategie!

Ja bei jeder Änderung, die „fertig programmiert ist“

Page 16: Continuous Integration / Deployment mit Jenkins CI

Darf ich vorstellen?

Der neue Senior Entwickler

Tester

Integrator

Reporter

Team Player

Page 17: Continuous Integration / Deployment mit Jenkins CI

Jenkins

Hauptfunktion ist

1. Automtisches kontinuierliches „bauen“ von Software

2. Überwachung von kontinuierlichen Prozessen - wie APIs, Cron-Scripten, Builds

Page 18: Continuous Integration / Deployment mit Jenkins CI

Jenkins1. Unit Tests durchführen und Auswerten2. Code-Reviews durchführen (Semantik, Stil, Probleme..)3. Einhaltung von Coding-Richtlinien prüfen4. Datenbanken prüfen / updaten / zurücksetzen5. System und Netzwerk Checks 6. Bauen der Software7. Managen von Symlinks (Revolving Deploys)8. Frontend / Regression-Tests durchführen9. Projektgesundheit überwachen10. Chuck Norris Witze machen

Page 19: Continuous Integration / Deployment mit Jenkins CI

Jenkins

Und das wars?

Page 20: Continuous Integration / Deployment mit Jenkins CI

Jenkins11. Integration mit Paas/IaaS/SaaS Systemen wie Cloudbees, Soucelabs, Amazon AWS12. Managen von Infrastruktur13. Überwachen von Systemprozessen14. Integration über Jenkins Remote API

u name it!

Derzeit ca 850 Plugins verfügbar - 2011 waren es 400

Page 21: Continuous Integration / Deployment mit Jenkins CI

Und die Vorteile?ja .. was könnte das wohl sein :)

Page 22: Continuous Integration / Deployment mit Jenkins CI

Und die Vorteile?Für Entwickler

1. Syntaktische Prüfung des Codes (Checkstyle, JSLint, PHP -l, etc)2. Fehler-Reports bei Problemen3. Unterstützung bei Einhaltung von Konventionen4. Überblick über die Projekte per Build Monitor5. Reduzierung der typischen Fehler6. keine nervigen manuellen Roboter-Aktivitäten 8. Kann sich auf das Coden konzentrieren9. Braucht kein schlechtes Gewissen zu haben

Page 23: Continuous Integration / Deployment mit Jenkins CI

Und die Vorteile?Für Projektleiter / POs

1. Harmonisierung von Prozessen2. Zuversichtlichkeit bei Projekten3. Steigerung der Produktivität und Qualität4. Metriken zum Verfolgen des Projektverlaufes5. Unterstützung im Agilen Entwicklungsprozess6. Bessere Transparenz / Auskunftsfähigkeit

Page 24: Continuous Integration / Deployment mit Jenkins CI

Und die Vorteile?Für Kunden

1. Frühe Testbarkeit von Produkt-Fragmenten2. Zuversichtlichkeit beim Projektverlauf3. Höhere Qualität des Endproduktes4. Weniger Post-Launch-Schmerzen5. Besseres Produkt durch früheren Proof-Of-Concept6. Bessere Zahlungsmoral

Page 25: Continuous Integration / Deployment mit Jenkins CI

Ok, will haben, was muss ich tun?

Page 26: Continuous Integration / Deployment mit Jenkins CI

Vorraussetzungen

1. kompletter Code in VCS (Git, SVN)2. Entwickler branchen ihr Feature3. automatischer Integrations- und Deployment-Prozess 4. Build und Testprozess muss schnell sein5. Tests müssen existieren (Unit, Behaviour, Frontend)6. Infrastruktur muss voll remote-administrierbar sein7. Offline-Repos für eigene Forks oder bei Firewalls (Satis)

Page 27: Continuous Integration / Deployment mit Jenkins CI

Beste Freunde

1. Agile Software Entwicklung2. TDD / BDD3. GIT / GitHub4. Automatische Spielfreunde wie Vagrant, Puppet, Capistrano, Chef)

Page 28: Continuous Integration / Deployment mit Jenkins CI

Live Demo?

1. Live Demo nächstes Mal2. ggf. an einem echten Beispiel

Page 29: Continuous Integration / Deployment mit Jenkins CI

Vielen Dank!