Continuous Integration / Deployment mit Jenkins CI

Post on 12-Nov-2014

506 views 1 download

Tags:

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

Continuous Integration / Deployment

mit Jenkins CI

Webmontag am DienstagSchwerin, 19.11.2013

FLORIANBOSSELMANN

Head of PHP/Frontend Software Development

@Silpion Hamburg

florian@ultradigital.deskype: 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 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

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

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 ü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

Die FolgeProjekt kaputtKeine Kunden mehrArmut 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ü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

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

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

Jenkins

Und das wars?

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

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

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

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

Ok, will haben, was muss ich tun?

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)

Beste Freunde

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

Live Demo?

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

Vielen Dank!