Inhaltsverzeichnis | 5 |
1 Einleitung | 11 |
1.1 Überblick über Continuous Delivery und das Buch | 11 |
1.2 Warum überhaupt Continuous Delivery? | 12 |
1.3 Für wen ist das Buch? | 15 |
1.4 Neu in der 2. Auflage | 15 |
1.5 Übersicht über die Kapitel | 17 |
1.6 Pfade durch das Buch | 18 |
1.7 Danksagung | 20 |
2 Continuous Delivery: Was und wie? | 23 |
2.1 Was ist Continuous Delivery? | 23 |
2.2 Warum Software-Releases so kompliziert sind | 23 |
2.3 Werte von Continuous Delivery | 24 |
2.4 Vorteile von Continuous Delivery | 27 |
2.4.1 Continuous Delivery für Time-to-Market | 27 |
2.4.2 Continuous Delivery zur Risikominimierung | 30 |
2.4.3 Schnelleres Feedback und Lean | 33 |
2.5 Aufbau und Struktur einer Continuous-Delivery- Pipeline | 34 |
2.6 Links & Literatur | 38 |
3 Infrastruktur bereitstellen | 39 |
3.1 Einleitung | 39 |
3.2 Installationsskripte | 41 |
3.3 Chef | 44 |
3.3.1 Technische Grundlagen | 47 |
3.3.2 Chef Solo | 54 |
3.3.3 Chef Solo: Fazit | 56 |
3.3.4 Knife und Chef Server | 56 |
3.3.5 Chef Server: Fazit | 61 |
3.4 Vagrant | 61 |
3.4.1 Ein Beispiel mit Chef und Vagrant | 63 |
3.4.2 Vagrant: Fazit | 65 |
3.5 Docker | 65 |
3.5.1 Dockers Lösung | 66 |
3.5.2 Docker-Container erstellen | 69 |
3.5.3 Beispielanwendung mit Docker betreiben | 71 |
3.5.4 Docker und Vagrant | 73 |
3.5.5 Docker Machine | 76 |
3.5.6 Komplexe Konfigurationen mit Docker | 78 |
3.5.7 Docker Compose | 80 |
3.6 Immutable Server | 83 |
3.7 Infrastructure as Code | 84 |
3.8 Platform as a Service (PaaS) | 87 |
3.9 Umgang mit Daten und Datenbanken | 89 |
3.10 Fazit | 92 |
3.11 Links & Literatur | 93 |
4 Build-Automatisierung und Continuous Integration | 97 |
4.1 Überblick | 97 |
4.2 Build-Automatisierung und Build-Tools | 98 |
4.2.1 Ant | 100 |
4.2.2 Maven | 100 |
4.2.3 Gradle | 105 |
4.2.4 Weitere Build-Tools | 108 |
4.2.5 Das geeignete Tool auswählen | 109 |
4.2.6 Links und Literatur | 110 |
4.2.7 Experimente und selber ausprobieren | 110 |
4.3 Unit-Tests | 111 |
4.3.1 »Gute« Unit-Tests schreiben | 113 |
4.3.2 TDD – Test-driven Development | 115 |
4.3.3 Clean Code und Software Craftsmanship | 116 |
4.3.4 Links und Literatur | 116 |
4.3.5 Experimente und selber ausprobieren | 117 |
4.4 Continuous Integration | 117 |
4.4.1 Jenkins | 118 |
4.4.2 Continuous-Integration-Infrastruktur | 124 |
4.4.3 Fazit | 125 |
4.4.4 Links und Literatur | 126 |
4.4.5 Experimente und selber ausprobieren | 126 |
4.5 Codequalität messen | 128 |
4.5.1 SonarQube | 130 |
4.5.2 Links und Literatur | 132 |
4.5.3 Experimente und selber ausprobieren | 132 |
4.6 Artefakte managen | 133 |
4.6.1 Integration in den Build | 135 |
4.6.2 Weiterreichende Funktionen von Repositories | 137 |
4.6.3 Links und Literatur | 137 |
4.6.4 Experimente und selber ausprobieren | 137 |
4.7 Fazit | 138 |
5 Akzeptanztests | 141 |
5.1 Einführung | 141 |
5.2 Die Test-Pyramide | 141 |
5.3 Was sind Akzeptanztests? | 145 |
5.4 GUI-basierte Akzeptanztests | 149 |
5.5 Alternative Werkzeuge für GUI-Tests | 155 |
5.6 Textuelle Akzeptanztests | 157 |
5.7 Alternative Frameworks | 160 |
5.8 Strategien für Akzeptanztests | 162 |
5.9 Fazit | 164 |
5.10 Links & Literatur | 165 |
6 Kapazitätstests | 167 |
6.1 Einführung | 167 |
6.2 Kapazitätstests – wie? | 168 |
6.3 Kapazitätstests implementieren | 173 |
6.4 Kapazitätstests mit Gatling | 174 |
6.5 Alternativen zu Gatling | 179 |
6.6 Fazit | 181 |
6.7 Links & Literatur | 182 |
7 Exploratives Testen | 183 |
7.1 Einleitung | 183 |
7.2 Warum explorative Tests? | 183 |
7.3 Wie vorgehen? | 185 |
7.4 Fazit | 189 |
7.5 Links & Literatur | 190 |
8 Deploy – der Rollout in Produktion | 191 |
8.1 Einleitung | 191 |
8.2 Rollout und Rollback | 192 |
8.3 Roll Forward | 193 |
8.4 Blue/Green Deployment | 195 |
8.5 Canary Releasing | 196 |
8.6 Continuous Deployment | 198 |
8.7 Virtualisierung | 200 |
8.8 Jenseits der Webanwendungen | 202 |
8.9 Fazit | 203 |
8.10 Links und Literatur | 204 |
9 Operate – Produktionsbetrieb der Anwendungen | 205 |
9.1 Einleitung | 205 |
9.2 Herausforderungen im Betrieb | 206 |
9.3 Log-Dateien | 208 |
9.3.1 Werkzeuge zum Verarbeiten von Log-Dateien | 210 |
9.3.2 Logging in der Beispielanwendung | 212 |
9.4 Logs der Beispielanwendung analysieren | 213 |
9.4.1 Experimente und selber ausprobieren | 218 |
9.5 Andere Technologien für Logs | 221 |
9.6 Fortgeschrittene Log-Techniken | 222 |
9.7 Monitoring | 223 |
9.8 Metriken mit Graphite | 224 |
9.9 Metriken in der Beispielanwendung | 226 |
9.9.1 Experimente und selber ausprobieren | 227 |
9.10 Andere Monitoring-Lösungen | 229 |
9.11 Weitere Herausforderungen beim Betrieb der Anwendung | 230 |
9.12 Fazit | 231 |
9.13 Links & Literatur | 232 |
10 Continuous Delivery im Unternehmen einführen | 235 |
10.1 Einleitung | 235 |
10.2 Continuous Delivery von Anfang an | 235 |
10.3 Value Stream Mapping | 236 |
10.4 Weitere Optimierungsmaßnahmen | 239 |
10.5 Zusammenfassung | 243 |
10.6 Links & Literatur | 243 |
11 Continuous Delivery und DevOps | 245 |
11.1 Einführung | 245 |
11.2 Was ist DevOps? | 245 |
11.3 Continuous Delivery und DevOps | 249 |
11.4 Continuous Delivery ohne DevOps? | 253 |
11.5 Fazit | 255 |
11.6 Links & Literatur | 256 |
12 Continuous Delivery, DevOps und Softwarearchitektur | 257 |
12.1 Einleitung | 257 |
12.2 Softwarearchitektur | 257 |
12.3 Komponentenaufteilung für Continuous Delivery optimieren | 260 |
12.4 Schnittstellen | 262 |
12.5 Datenbanken | 265 |
12.6 Microservices | 268 |
12.7 Umgang mit neuen Features | 271 |
12.8 Fazit | 274 |
12.9 Links & Literatur | 275 |
13 Fazit: Was bringt’s? | 277 |
13.1 Links & Literatur | 278 |
Index | 279 |
www.dpunkt.de | 0 |