DbUp è una libreria .NET che facilita il deploy delle modifiche allo schema del database di una applicazione. Tiene traccia degli scripts SQL che sono già stati applicati ed esegue gli script di modifica, necessari ad effettuare la migrazione del database.
3. Come aggiornare il Database?
Alcuni metodi :
• Manual - copio tutti i file sul server e lancio “a-man”
tutti gli script per ogni database.
• Scripted - tramite PowerShell, semi-automatizzo
l’esecuzione degli script.
• Automation tools - utilizzo strumenti
come OctopusDeploy o Release Management per
distribuire in modo automatico il codice. Per il
database utilizzo strumenti di terze parti come
RedGate oppure le EF Migration.
26/05/17 3
4. La soluzione : DbUp
“helps you to deploy changes to SQL Server
databases. It tracks which SQL scripts have been run
already, and runs the change scripts that are needed
to get your database up to date
”
Official project website: http://dbup.github.io
26/05/17 4
5. La filosofia alla base del progetto
• Transactions, not States
• Database management:
• Source controlled.
• Testability.
• Continuous integration.
• No shared databases.
• Dogfooding upgrades.
• Versions table
• Sample data
• Migration libraries
26/05/17 5
6. I punti di forza
• Extensibility.
• Logging.
• Journaling.
• Code scripts.
• Pre-processor and variabile substitutions.
• Transactions.
26/05/17 6
7. Dove metto gli script
Script provider:
• EmbeddedScriptsProvider - SQL scripts as
embedded resources
• FileSystemScriptProvider - SQL scripts from the file
system
• StaticScriptProvider - SQL scripts defined in code
• EmbeddedScriptAndCodeProvider - SQL scripts
defined both as embedded resources and in code
26/05/17 7
10. Come lavoravamo?
Il nostro processo di deployment database, prima di DbUp,
prevedeva l’utilizzo di SourceSafe come repository per gli
script e la generazione di un eseguibile avviato manualmente
permetteva l’aggiornamento della base dati.
I problemi erano diversi, tra cui:
• Esecuzione non transazionale.
• Difficoltà nel riconoscere eventuali errori d’aggiornamento.
• Tracciabilità complessa.
• Rilascio degli script sul server del cliente.
• Utilizzo di un repository datato.
26/05/17 10
11. Il nostro approccio
La soluzione attuale si basa su alcuni punti chiave:
• Gestione a revisioni.
• Integrazione all'interno della nostra deployment pipeline su
TFS.
• Storicizzazione script all’interno della soluzione.
• Creazione di uno strato di software che facilitasse sia il team
di sviluppo che l'assistenza negli aggiornamenti intermedi
(Developer Mode).
• Provider di logging custom.
26/05/17 11
13. Approndimenti sulle features
Vediamo ora alcune caratteristiche utili della libreria :
• Helper TemporarySqlDatabase & AdHocSqlRunner : da
utilizzare in ambito unit test.
• Parsing dello script prima che venga eseguito tramite
l’interfaccia IScriptPreprocessor.
• Utilizzo della classe di Journaling NullJournal() per
consentire l’esecuzione di script indipendenti (ex. Pre-Post
processo)
26/05/17 13
14. Links
• DbUp official project site
http://dbup.github.io/
• DbUp on GitHub
https://github.com/DbUp/DbUp
• Documentazione DbUp
http://dbup.readthedocs.io/en/latest/
• Handling Entity Framework database migrations in production
http://www.thereformedprogrammer.net/handling-entity-framework-
database-migrations-in-production-part-1-applying-the-updates/
• DbUp Package Manager Console Scripts
https://github.com/bradyholt/dbup-consolescripts
• DbUp discussion group google
https://groups.google.com/forum/?fromgroups#!forum/dbup-discuss
26/05/17 14
15. Fine
Grazie a tutti.
26/05/17 15
Marco Bortolin
m.bortolin@hunext.com
Twitter: @marcobortolin
Andrea Cirioni
a.cirioni@hunext.com
Twitter: @cirio
www.hunext.com