Von Continuous Integration zu Continuous Deployment Manuel Pichler <mapi@pdepend.org> 31. Mai 2010
Über mich Manuel Pichler Jahrgang 1978 Diplom Informatiker Softwarearchitekt Entwickler von: PHP_Depend phpundercontrol PHPMD Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 2
Warum kontinuierlich integrieren? Frühzeitige Erkennung von Fehlern Minimierung manueller Arbeitsschritte Lauffähige Softwareversion zu jeder Zeit Transparenz des Entwicklungsprozesses Zufriedenheit mit dem eigenen Produkt Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 3
Agenda Klassische Integration Grundlagen für kontinuierliche Integration Kontinuierliche Integration Prozesse und Techniken im Detail Continuous Deployment Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 4
Klassische Integration deploy Entwickler Stage / Live Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 5
Klassische Integration Dieser Ansatz scheitert spätestens: Mit größer werdenden Teams deploy Stage / Live Entwickler Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 6
Klassische Integration Dieser Ansatz scheitert spätestens: Mit größer werdenden Teams Mit komplexeren Projekten deploy Stage / Live Entwickler Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 7
Agenda Klassische Integration Grundlagen für kontinuierliche Integration Kontinuierliche Integration Prozesse und Techniken im Detail Continuous Deployment Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 8
Zurück zum Ausgangspunkt deploy Entwickler Stage / Live Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 9
Grundvoraussetzungen Versionsmanagement ~ $ svn ci deploy SVN, Git Stage / Live Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 10
Grundvoraussetzungen Versionsmanagement Automatisierte Tests ~ $ svn ci deploy ~ $ phpunit AllTests Entwickler SVN, Git Stage / Live Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 11
Grundvoraussetzungen Versionsmanagement Automatisierte Tests Buildmanagement ~ $ svn ci deploy ~ $ ant Entwickler SVN, Git Stage / Live Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 12
Zwischenfazit 25% - Frühzeitige Erkennung von Fehlern Automatisierte Tests 50% - Minimierung manueller Arbeitsschritte Buildautomatisierung 25% - Lauffähige Softwareversion zu jeder Zeit Versionsverwaltung 25% - Transparenz des Entwicklungsprozesses Commithistorie 31% - Zufriedenheit mit dem eigenen Produkt Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 13
Agenda Klassische Integration Grundlagen für kontinuierliche Integration Kontinuierliche Integration Prozesse und Techniken im Detail Continuous Deployment Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 14
Kontinuierliche Integration ist......nicht nur ein Werkzeug, sondern hat Einfluss auf den gesamten Entwicklungsprozess Jede Änderung wird zeitnah eingecheckt Die Versionsverwaltung ist kein Zwischenspeicher für fehlerhaften Quelltext Fehlgeschlagene Builds werden umgehend gefixt, denn oberstes Ziel ist eine lauffähige Software Mittels Buildskript führt jeder Entwickler vor einem Commit eine lokale Integration durch Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 15
Etappenziel erreicht ~ $ svn ci deploy Entwickler SVN, Git Stage / Live poll svn copy XML-Logs Feedback: Mail, Twitter, RSS Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 16
Zwischenfazit 50% - Frühzeitige Erkennung von Fehlern Automatisierte Tests, Testlauf nach jedem Commit 50% - Minimierung manueller Arbeitsschritte Buildautomatisierung 50% - Lauffähige Softwareversion zu jeder Zeit Versionsverwaltung, CI-Version 50% - Transparenz des Entwicklungsprozesses Commithistorie, CI-Feedback 50% - Zufriedenheit mit dem eigenen Produkt Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 17
Agenda Klassische Integration Grundlagen für kontinuierliche Integration Kontinuierliche Integration Prozesse und Techniken im Detail Continuous Deployment Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 18
Versionsmanagement Artefakte die versioniert werden sollten Quelltexte jeglicher Art Konfigurationsdateien Branches zur Trennung von Produktlinien Releases und Features bekommen einen Branch Tags Releases und erfolgreiche Builds werden mit einem Tag versehen Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 19
Tagging & Branching tags/r10kw02_build03 tags/r10kw02_build02 tags/r10kw02_build01 tags/r10kw06_build03 tags/r10kw06_build02 tags/r10kw06_build01 Tagesgeschäft tags/r10kw02 Mainline branches/r10kw02 tags/r10kw06 branches/r10kw06 Neuentwicklung branches/feature42 tags/feature42_build02 tags/feature42_build01 tags/feature42_build04 tags/feature42_build03 tags/feature42_build05 tags/featu... Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 20
Komponenten bilden svn:externals Git submodule PEAR Paket Datenzugriffsschicht Projekt Domainmodel Präsentationsschicht Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 21
Vorteile der Komponentenbildung Komponenten sind getrennt von einander testbar Kürzere Zeitenspanne bis zum Feedback Es existieren immer stabile Versionen von Komponenten und der gesamten Software Definierte und gut sichtbare Abhängigkeiten Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 22
Testverfahren Software- & Akzeptanztests mit PHPUnit, Selenium, Fitnesse Statische Tests Lint, PHPCPD, PHP_CodeSniffer, PHPMD Last- und Performancetests JMeter Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 23
Akzeptanztest... Wer kennt Fitnesse? Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 24
Statische Tests Gerade bei modernen, browserbasierten Anwendungen ist syntaktische Korrektheit Die einfachste Form der statischen Codeanalyse ist das lintern: php -l W3C CSS Validator xmllint html noout http://www.example.com/ Douglas Crockfords JSLint Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 25
Programmierkonventionen Ein häufig unterschätzter Qualitätsaspekt Wo hinterlässt man eher Unrat? Im keimfreien Operationssaal Neben einer überquellenden Mülltonne Reduziert die Einarbeitungszeit in Quelltext PHP_CodeSniffer ist hier der Defacto-Standard Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 26
Softwaremetriken Eine Softwaremetrik ist eine Maßzahl für Qualitätsmerkmale von Software Mathematische Funktion zur Ermittlung von Kennzahlen Softwaremetriken ermöglichen die Kontrolle der qualitativen Entwicklung von Software Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 27
Buildmanagement Datenbanken Anlegen/Löschen von Schemata und Testdaten Automatisierung von Schema-Migrationen Für jede Änderung existiert der passende Rollback Doctrine Migrate, DbDeploy Automatisierung aller Schritte zur Erzeugung einer frei wählbaren Softwarekonfiguration One Click Install Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 28
Zwischenfazit 75% - Frühzeitige Erkennung von Fehlern Automatisierte Tests, Testlauf nach jedem Commit 75% - Minimierung manueller Arbeitsschritte Buildautomatisierung, One Click Install 75% - Lauffähige Softwareversion zu jeder Zeit Versionsverwaltung, CI-Version, Tags 75% - Transparenz des Entwicklungsprozesses Commithistorie, CI-Feedback 75% - Zufriedenheit mit dem eigenen Produkt Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 29
Agenda Klassische Integration Grundlagen für kontinuierliche Integration Kontinuierliche Integration Prozesse und Techniken im Detail Continuous Deployment Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 30
Continuous Deployment Was ist zu beachten? CI-, Stage- und Live-System müssen identisch sein Klare Abgrenzung zwischen Tagesgeschäft und Neuentwicklungen Deployments erfolgen nur aus einem durch die QA abgenommenen Branch Deployt wird immer auf eine Stage-Umgebung, wo die letzte Abnahme erfolgt Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 31
Continuous Deployment ~ $ svn ci Entwickler SVN, Git Stage svn copy poll deploy XML-Logs Feedback: Mail, Twitter, RSS Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 32
Danke? Contact: Manuel Pichler http://manuel-pichler.de mapi@pdepend.org @manuelp Kommentare, Anregungen & Bewertung: http://joind.in/1719 Berlin, 31. Mai. 10 Von Continuous Integration zu Continuous Deployment 33