Continuous Deployment
Roadmap
Requirements for CD in larger Enterprises
Stephan Kaps
Leiter Softwareentwicklung Bundesamt für Soziale Sicherung
Gründer Java User Group Bonn
Java Entwickler & Architekt seit 2002
Weitere Schwerpunkte:
✘ Softwareentwicklungsprozesse
✘ BizDevSecOps
✘ OpenSource
✘ Speaker & Autor
@kitenco1
Wish
Demand
or
@kitenco1
Release Anti-Pattern
✘ Software manuell deployen
✘ In der Staging- oder Test-Umgebung wird erst nach Ende der
Entwicklung deployed
✘ Manuelle Konfiguration der Produktionsumgebung
@kitenco1
Geht es besser?
Releases sollen "langweilig" werden. Dafür sind gewisse Prinzipien,
Praktiken und Techniken notwendig.
Releases sollten mit geringem Risiko, häufig, verlässlich, günstig
und rapide erfolgen können.
@kitenco1
Automatic deployment in production
@kitenco1
Shared Responsibilities
Availability, Security and
Quality
&
@kitenco1
@kitenco1
https://code-maze.com/what-is-continuous-integration/
Motivation
@kitenco1
Performance Steigern
@kitenco1
Schlüsselkompetenzen für performante
Softwarebereitstellung
✘ Führung
✘ Werkzeuge
✘ Automatisierung
✘ Kultur ständigen Lernens und ständiger
Verbesserung
@kitenco1
1. Continuous Integration
@kitenco1
Vorteile
✘ Build & Checks bei jedem Commit
✘ Jederzeit auslieferbare Software
✘ Fail fast / Fast Feedback
✘ Gestiegene Qualität & Vertrauen
@kitenco1
Anforderungen an CI
✘ Version Control
✘ CI-Server
✘ Artifact Repository
✘ Automated Tests
✘ Security Testing (SAST & DAST)
✘ Trunk-Based-Development
✘ Team Agreement
@kitenco1
Notwendige Praktiken
✘ Nicht einchecken in einen Broken Build
✘ Alle commit Tests vor dem Einchecken ausführen, entweder lokal oder durch den
CI-Server (erst den aktuellen Stand auschecken und Build und Tests durchlaufen)
✘ Bevor man weitermacht, auf den fertigen erfolgreichen Commit Test warten
✘ Niemals nach Hause gehen, wenn der Build broken ist
✘ Immer vorbereitet sein, auf die letzte Version zurückzugehen
✘ Time-Box-Fixing (10 Minuten?) Versuch das Problem zu lösen, sonst wird auf die
letzte Version zurückgegangen
✘ Fehlgeschlagene Tests nicht auskommentieren
✘ Verantwortung für fehlgeschlagene Builds und Tests übernehmen, d.h. auch Tests
anderer anpassen, wenn sie durch die eigene Änderung nicht mehr funktionieren
✘ Test-driven Development
@kitenco1
Empfohlene Praktiken
✘ Extreme Programming Development Practices
✘ Den Build fehlschlagen lassen
○ bei Architektur Verstößen
○ Bei zu langsamen Tests
○ Bei Code Style Verstößen
@kitenco1
2. Continuous Delivery
@kitenco1
Vorteile
✘ Release faster and more often
✘ Minimize risk
✘ Fast Feedback
✘ Increase trust in deployment process
✘ Faster project setup
✘ Increase transparency
@kitenco1
Anforderungen für CD
✘ wie für CI
✘ Entwickle (gescriptete) Delivery Pipelines
✘ Automatisierte Datenbank Änderungen
✘ Unified Deployment
✘ Evtl. organisatorische oder kulturelle Herausforderungen
@kitenco1
Automatic Database Changes
@kitenco1
Wann nehme ich was?
FLYWAY
- gut für interne Anwendungen mit
gleicher DB Technologie
LIQUIBASE
- gut für Produkte, die beim Kunden auf
unterschiedlichen Datenbanken
betrieben werden können müssen
@kitenco1
Unified Deployment
@kitenco1
Deployment Package
Environment
Deployment Process
DEV STAGE PROD
@kitenco1
@kitenco1
@kitenco1
Automated Scripted Pipelines
jedes Projekt mit
bestimmten TAG
Continuous-Delivery-Kompetenzen
1. Verwenden Sie eine Versionsverwaltung für
alle Produktionsartefakte
2. Automatisieren Sie Ihren Deployment-Prozess
3. Implementieren Sie Continuous Integration
4. Nutzen Sie trunk-basierte Entwicklungsmethoden
5. Implementieren Sie Testautomatisierung
6. Unterstützen Sie Testdatenmanagement
7. Integration von Security in den
Softwareentwicklungsprozess (DevSecOps)
8. Continuous Delivery implementieren
@kitenco1
But what about long running
changes or refactorings?
@kitenco1
Branch by Abstraction
@kitenco1
@kitenco1
@kitenco1
@kitenco1
@kitenco1
Vorteile
✘ eine Migration kann angehalten werden, aber der Build
bleibt grün
✘ beide Implementierungen können parallel existieren und
können somit getestet werden
@kitenco1
Feature Toggles
@kitenco1
https://www.gocd.org/2018/05/30/ci-microservices-feature-toggles-trunk-based-development/
@kitenco1
@kitenco1
@kitenco1
3. Zero Downtime
@kitenco1
Blue-Green-Deployments
@kitenco1
Canary-Deployments
@kitenco1
@kitenco1
4. Secrets Management
@kitenco1
@kitenco1
@kitenco1
@kitenco1
@kitenco1
5. Security & Compliance
@kitenco1
Container Security Risks
✘ foreign containers from unknown sources
✘ manipulated Images (maybe with Malware)
✘ containers with known vulnerabilities
@kitenco1
Container Security Guide
✘ use only official or signed images
✘ implement Content Trust
✘ do Vulnerability Scans
✘ use a trusted Container Registry (Harbor Project)
✘ follow Container Security Verification Standard
@kitenco1
@kitenco1
@kitenco1
@kitenco1
@kitenco1
Inter-Service-Communication
@kitenco1
“Stellen Sie sicher, dass Geheimnisse
(z. B. kryptografische Schlüssel und
Kennwörter) sicher mit einer Secret
Management Lösung verwendet
werden, anstatt z.B. unter
Verwendung von
Umgebungsvariablen einem
Container bereitgestellt werden.
@kitenco1
Container Security Verification Standard (CSVS)
- OWASP OpenSource Projekt
- Als ausführliche Anleitung zur Sicherheitsarchitektur
- Als Ersatz für handelsübliche Checklisten
- Für Sicherheitstrainings
- drei Stufen, die man als Beginner, Fortgeschritten und Expertenlevel
beschreiben könnte
- Insgesamt 106 Empfehlungen, unterteilt in 12 Kategorien
@kitenco1
Final Destination:
No-Test-Environments
@kitenco1
Key takeaways
@kitenco1
Availability
Quality & Speed
Security
Shared Responsibilities@kitenco1
Continuous Integration
@kitenco1
Continuous Delivery
Feature Toggles
branch by Abstraction
Secrets Management
Zero Downtime
Container Security
Service Mesh
I wish you every success
on this exciting journey
@kitenco1
Vielen Dank!
Kontakt:
Stephan Kaps
info@kitenco.de
www.kitenco.de
@kitenco1
https://www.xing.com/profile/Stephan_Kaps2
https://www.linkedin.com/in/stephan-kaps-b246b0ab/
http://de.slideshare.net/kitenco
Quelle aller Hintergrundgrafiken ist https://www.pixabay.com
https://open.spotify.com/album/2tHppzsY0ZPb57Xa7PRkEX

Kaps - Continuous Deployment Roadmap