ALM Days 2015 - Database Lifecycle Management

Werbung
Constantin „Kostja“ Klein | Freudenberg IT SE & Co. KG
@KostjaKlein
Wer von Ihnen verwendet eine Versionsverwaltung
für den Anwendungscode?
C#, ASP.NET, JavaScript, VB.NET, …
Software Engineering war nie spannender.
Wer von Ihnen verwendet eine Versionsverwaltung
für den DatenbankAnwendungscode?
Software Engineering war nie spannender.
Ebenen des DB Lifecycle Managements
CD
Continuous
Integration
Versionsverwaltung
Manuell
Software Engineering war nie spannender.
CD = Continuous Delivery/Deployment
Versionsverwaltung
Die absolute Grundlage
Software Engineering war nie spannender.
Die Meinung im Internet
Source: http://programmers.stackexchange.com/questions/122150/how-can-i-convince-cowboy-programmers-to-use-source-control
Source: http://www.makeuseof.com/tag/git-version-control-youre-developer/
Source: https://www.drupal.org/node/299067
Software Engineering war nie spannender.
Und für Datenbanken?
Source: http://blog.codinghorror.com/is-your-database-under-version-control/
Software Engineering war nie spannender.
Und auch Microsoft sagt es ;-)
http://msdn.microsoft.com/en-us/library/ms181368.aspx
Software Engineering war nie spannender.
Der beste Grund
Use source control because neither you nor your
team are perfect
Source: http://stackoverflow.com/questions/559332/why-should-my-team-adopt-source-control
Software Engineering war nie spannender.
… und …
If it’s not in source control,
it doesn’t exist.
Source: http://stackoverflow.com/questions/559332/why-should-my-team-adopt-source-control
Software Engineering war nie spannender.
Im Detail
• Backup und Restore
• Synchronisation
• Kurzfristige Chance zur
Rücknahme von Änderungen
• Langfristige Chance zur
Rücknahme von Änderungen
Software Engineering war nie spannender.
• Change Tracking
• Ownership Tracking
• Unabhängigkeit durch
„Sandboxing“
• Grundlage für Branching und
Merging
Version Control – egal wie …
Software Engineering war nie spannender.
Strategien zur Datenbankversionierung
• Upgrade Scripts
• Versionierung durch Abstraction / Versionierung
von Code
• Versionierung von Schema (und Static Data)
Software Engineering war nie spannender.
Upgrade Scripts
Pros
Cons
• Audit
• Wiederholbarkeit
• Leichtgewichtiges Deployment
• Keine State-Historie
• Wiederholung von Änderungen
erforderlich
• Kein Integritätscheck
• Branching und Merging wird schwer
Software Engineering war nie spannender.
Versionierung mit Abstraction
Pros
Cons
• Datenbankänderungen werden
automatisch durch Codeänderungen
generiert
• State-Historie und Audit
• Atomic commits
• Tooling und Prozess
• Unter Umständen
plattformunabhängig
• Grenzen des Frameworks
• Zusätzliche Custom Upgrade Scripts
Software Engineering war nie spannender.
Versionierung von Schema
Pros
Cons
• State-Historie und Audit
• Leichtes Branching und Merging
• Einfaches On-Boarding durch
Erstellen neuer Umgebungen
• Gutes Tooling verfügbar
(neben SSDT z.B. SQL Source
Control)
• Custom Upgrade Scripts
Software Engineering war nie spannender.
Redgate SQL Source Control
DEMO
Software Engineering war nie spannender.
Unit Testing
Natürlich auch für Datenbanken
Software Engineering war nie spannender.
TDD mit SSDT
DEMO
Software Engineering war nie spannender.
Database Unit Testing in SSDT
• Test Initialize/Cleanup Scripts
• Vorbereitung der Umgebung für den Test
• Aufräumen danach
• Pre/Post Test Scripts
• Vorbereitung des eigentlichen Tests
• ggf. Nachbereitung
• Test Script
• Hier steht der Test
Software Engineering war nie spannender.
CI / CD
Continuous Integration oder Continuous Deployment
… jetzt wird automatisiert
Software Engineering war nie spannender.
Wann wird integriert / deployed?
•
•
•
•
Immer dann wenn wir uns danach fühlen
Täglich
Auf Basis eines Schedules
Bei jedem Check-In in die Quellcodeverwaltung
Software Engineering war nie spannender.
Zum Integrationszeitpunkt
•
•
•
•
Bedeutet mehr Zeit seit der letzten Integration gleichzeitig mehr Fehler
Mehr Fehler bedeutet mehr Zeit um diese zu lösen
In dieser Zeit wird aber weiterentwickelt
Und am Ende wird eventuell nie integriert
Main
New Developer
Time
Software Engineering war nie spannender.
Häufigere Integration
• Bedeutet weniger Probleme die gelöst werden müssen
• Ein Deployment kann immer stattfinden
• Der Code ist bei jedem Entwickler in einem Build-fähigen Zustand
Main
New Developer
Time
Software Engineering war nie spannender.
Continuous Integration / Continuous Deployment
DEMO
Software Engineering war nie spannender.
Vorteile von CI
• CI verhindert das „Works on my machine“ syndrom
• Die Änderungen aller Entwickler kommen in das Deployment und keiner
wird abgehängt
• Tests können kontinuierlich laufen und so im Falle eines Fehlers früher
informieren
• Größere Sichtbarkeit des Projektes
• Das Deployment wird unabhängig von den Entwicklern
• Einfachere Bereitstellung einer Umgebung für ein neues Teammitglied
Software Engineering war nie spannender.
Nachteile Hürden von CI
•
•
•
•
Es benötigt Zeit den CI Prozess aufzubauen
Funktioniert besser mit Tests
Kurze Buildzeiten helfen – daran kann/muss man arbeiten
Verletzter Stolz
Software Engineering war nie spannender.
Fragen ???
Software Engineering war nie spannender.
Wrap up
• Versionskontrolle der Datenbank ist die existentielle
Grundlage für professionelle Datenbankentwicklung
• Tooling, Versionierungsstrategie und bevorzugte
Umgebung spielen dabei eine wichtige Rolle
• „If it’s not in source control, it doesn’t exist“
• TDD und CI sind auch für Datenbanken möglich
Software Engineering war nie spannender.
Feedback !!!
Software Engineering war nie spannender.
Speakerinfo: Constantin Klein
Constantin arbeitet bei der Freudenberg IT SE & Co. KG. Dort
beschäftigt er sich mit der Entwicklung von Lösungen auf
Basis der Microsoft Produkte und Technologie Plattformen.
Sein besonderes Interesse gilt dabei der Gewinnung,
Verarbeitung und Nutzung von Daten und Informationen. Er
ist MCSD, MCITP Database Developer und MCPD Web +
Enterprise Application Developer. Seit 2010 wurde er jährlich
von Microsoft zum Most Valuable Professional (MVP) für SQL
Server ernannt. Er engagiert sich zusätzlich im Vorstand des Just
Community e.V. und des PASS Deutschland e.V.. Er leitet
außerdem die .NET User Group Frankfurt.
Sein Blog finden Sie unter
http://kostjaklein.wordpress.com
Software Engineering war nie spannender.
Ressourcen
• Jamie Thomson: Continuous deployment of SSDT
database projects
http://tiny.cc/JamieCI
• Andrew Fenna: Introduction to SQL Server Data Tools
http://tiny.cc/AndrewSSDT
Software Engineering war nie spannender.
Herunterladen