Continuous Integration / Deployment mit Jenkins CI
-
Upload
florian-bosselmann -
Category
Technology
-
view
506 -
download
1
description
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
[email protected]: 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!