#doh19 · 2019. 10. 28. · build automazione completa con tfs 2017 generazione automatica degli...
TRANSCRIPT
#DOH19
#DOH19 2
Organizer & sponsors
GetLatestVersion.it
Umile piccola storia di un team di BI
Dobbiamo essere
“AGILE”!
… OK ...
...
Benefici dell’Agile
A
Buongiorno a tutti!
A
● Individui e interazioni vengono prima di processi e strumenti
● La collaborazione con il cliente è più importante della negoziazione
del contratto
● Fornire strumenti di analisi utilizzabili è più importante di una
documentazione completa
● Iterazione, feedback e sperimentazione, invece di progettazione
iniziale comprensiva
● Responsabilità interfunzionali invece che compartimentali
A
Cosa ne dite?
IO CI CREDO!
Anch’io ci credo... Io non
credo MAI!
Facciamo “Cose Strane”
Ok, niente paura!
Ho l’uomo che fa per voi!
Veramente noi facciamo BI su
altre tecnologie...
Fortunatamente il vostro stack per lo sviluppo applicativo basato su
tecnologia MS si integra perfettamente...
Ok, siamo pronti a mettere in
campo l’Agile!
Abbiamo chiarito gli
aspetti culturali e metodologici...
… e come utilizzare TFS 2017 per la gestione del
lavoro...
Ehm...Si?Mmm...
A
Sommario
● Chi Siamo (Dove stiamo andando e perché)
● La nostra esperienza BI DevOps
○ Il nostro scenario
○ Sfide Tecnologiche e Metodologiche
○ Soluzione: Visione e stato avanzamento lavori (con Demo)
Un DevOps Hero contro uno Scenario Mostruoso
ECCOMI QUA!
Ah, Ah!
WOW!Che figo il mantello!
Ed il Database sul petto!
No, è la pila dei dischetti
dell’MVP!
Ma ora raccontatemi
del vostro scenario...
Scenario
● Team e Organizzazione○ BI Team (4 persone)
○ Dipartimento sviluppa sistemi gestionali (5 Dev Teams, 50+ Persone)
○ Recente introduzione metodologia Agile
● Attività di Sviluppo○ Data Warehouse che contiene i dati integrati dei sistemi gestionali
○ Modelli dimensionali / mart per applicazioni specifiche
○ Flussi ETL per la movimentazione dei dati
○ Applicazioni analitiche, reports a dashboards
● Tecnologie○ Databases: Vertica, MS SqlServer
○ ETL: SSIS, SQL
○ Presentazione: SAP Business Objects, SSRS, PowerBI
○ (DevOps: TFS 2017, TFVC, PowerShell)
Vertica
OLTPOLTP
OLTPOLTP
OLTP
Stg DWH
RepRep
Rep
MartMart
Mart
E quali sono i vostri obiettivi?
● Orientamento al cliente e condivisione delle responsabilità○ Migliorare la comunicazione e la trasparenza
○ Sviluppare la capacità di gestire il cambiamento per supportare l’evoluzione dei bisogni
○ Promuovere la condivisione delle responsabilità ed il coinvolgimento
● Migliorare la condizione del team○ Teamwork e condivisione della conoscenza
○ Sviluppo professionale e crescita delle competenze
○ Migliorare modalità e sostenibilità del lavoro
● Ottimizzare la generazione del valore○ Riduzione del tempo di generazione
○ Qualità, consistenza e predicibilità delle consegne
○ Miglioramento continuo (feedback, revisione retrospettiva, monitoraggio)
○ Semplicità, riutilizzo, riproducibilità, ...
Obiettivi Culturali e Metodologici
● Ridefinizione dei processi di base: Sviluppo, Build e Rilascio
● Automazione degli stessi (Riutilizzando le technologie in essere)
● Eliminazione delle attività ripetitive e semplificazione del flusso di lavoro
quotidiano
● Porre le basi per il miglioramento sistematico dell’efficienza e della qualità
(Test automatici)
Obiettivi Tecnici e Procedurali
Solo una cosa che non mi è
completamente chiara...
OK, tutto chiaro...
(Ovviamente! Sono un
DevOps Hero di Classe S!)
つづく
Sfide Tecnologiche
...Che diavolo è
Vertica ?!?
Cos’è Vertica
● Database colonnare
● Caratteristiche○ Performance di query superiori per workflow analitici e funzionalità analitiche in SQL
○ Alta disponibilità e scalabilità lineare su più nodi
○ Economicamente vantaggioso
○ “On Prem Native”
■ => Di nicchia, ma ottimo in funzione del nostro caso d’uso
● Storia○ Nasce nel 2005 come progetto accademico del MIT (C-Store)
○ Commercializzato dall’omonima società fondata nello stesso anno
○ Successivamente acquisito da HP nel 2011 e poi da Micro Focus nel 2017
● Nota terminologica○ Schema (Vertica) = Database (SqlServer)
Schema Compare?
Integrazione con TFS 2017?
Pronto, ma supportate
qualche strumento di sviluppo per
Vertica?
OK, verifichiamo che strumenti ci
sono a disposizione...
Strumenti di sviluppo avanzati,
tipo Database Projects?
Nop...
Va beh, sentiamo Micro Focus...
Nop
Conclusioni
● Mancanza di strumenti di sviluppo specifici per Vertica
● Mancanza di strumenti per la comparazione e l’allineamento degli schemi
● Non ci sono strumenti DevOps per Vertica nei progetti futuri di Micro
Focus
➔ E’ un rischio, ma dovremo sviluppare gli strumenti necessari
internamente
Visione della soluzione
Ok ragazzi, gli obiettivi e le sfide tecnologiche sono
chiari...
Ma niente paura! Grazie al potere della mia super visione...
Ma per cominciare ci serve avere una
visione chiara della soluzione da
implementare...
… Anzi no ripensandoci, forse è meglio se facciamo un brainstorming...
● Esplorazione dei dati○ Resta fondamentale. Accesso a dati anonimizzati in ambiente di integrazione
○ Finalizzata alla individuazione di pattern di dati per lo sviluppo
● Sviluppo○ Riorganizzazione del codice sorgente
■ Separare nettamente le componenti dell’applicazione dalle logiche di build e rilascio
○ Migliorare l’ambiente di sviluppo
■ Sandbox completa dedicata per ciascuno sviluppatore, facilmente ricreabile
● Build○ Automazione completa con TFS 2017
○ Generazione automatica degli script di deploy incrementali (tool sviluppato internamente)
● Rilascio○ Automazione completa con TFS 2017
○ Test (Sviluppo, funzionali, integrazione) inizialmente manuali
Visione
Processo di Sviluppo
Ora ragazzi è giunto il
momento di mostrarvi il mio
vero potere...
IL POTERE DEL
GUSCIO!
… ? ...Ehm… si
insomma...
…me la cavo con
PowerShell...
Premesse
● Riorganizzazione del codice sorgente
○ Livello logico - Definizione del database. Script separati per ciascun oggetto
○ Livello fisico - Strutture dati di supporto specifiche per ambiente
○ Logiche di build
● Miglioramento dell’ambiente di sviluppo
○ Sandbox dedicata per ciascuno sviluppatore
○ Macchina personale con ambiente di sviluppo Windows
■ VS2017, VSCode, SQL Client, SQL Server, BO Dev Tools, PBI Desktop
○ Macchina virtuale Linux per Vertica
Processo
● Get Latest Version
● Build e deploy su ambiente di sviluppo
○ Progetti SSIS
○ Build da zero schemi Vertica + provisioning dei dati (Script PowerShell)
● Sviluppo su Sandbox
● Test manuali
● Definizione del Changeset candidato
● Rebuild e deploy (changeset candidato) e test
● “Pre Integrazione” (Get Latest Version)
● Commit
Automazione
● Sviluppo
○ Build, rilascio e tests manuali
○ Tools IDE + Script Powershell per provisioning DB Vertica
● Integrazione
○ Forte automazione dei processi di Build e Rilascio
○ TFS 2017 Pipelines + PowerShell
■ Strumenti integrati per SSIS e SqlServer
■ Scripts PowerShell per azioni personalizzate
Demo
Processo di Integrazione
Ok, allora il processo è
chiaro a tutti?Certo!
Certo!Certo!
Obiettivi
● Organizzazione del codice (Solo script di Definizione su SC)
● Automazione completa Build e Release
Problemi
● Generazione script di rilascio incrementali
○ Vincoli: Mancanza tool automatici per allineamento degli schemi
Soluzione
● Sviluppo interno di un tool automatico di allineamento○ Comparazione tra schemi
○ Generazione Scripts incrementali di allineamento
○ Automatico ed integrato nella pipeline di Build
ShadowDB
Comp. Tool
INT DB
DB Def. Scripts
(SC)
DB Inc. Scripts(Artif.)
Build (Integrazione - Vertica)
Obiettivi
● Organizzazione del codice
● Automazione completa Build e Release
● Integrazione Continua (Schedulata) / Flessibilità di rilascio
Problemi
● (Fattibilità di sviluppare internamente il tool di allineamento automatico)
● Necessità di collezionare e ordinare gli script incrementali parziali
● Necessità di tracciare lo stato del database obiettivo
● Inconsistenze tra stato database e sviluppi in caso di errori di esecuzione
● Script contenenti Mix di Features
Conclusioni
● Necessità di prevedere gestione degli errori e revisione degli obiettivi
Obiettivi
● Organizzazione del codice
● Automazione “Ragionevole” di Build e Release
● Integrazione Continua (Flessibilità di rilascio)
● Gestione degli errori di integrazione (per gestire le inconsistenze)
Soluzione
● Script di rilascio incrementali sviluppati ed eseguiti manualmente
○ Creati in fase di sviluppo (Con eventuale supporto di un tool di comparazione
sviluppato internamente)
● Script di rilascio incrementali parziali atomici per Feature
● Possibilità di ripristinare lo stato del database mediante scripts di rollback
Problemi / Soluzioni
● Fattibilità di sviluppare internamente il tool di allineamento automatico
➔ Non è più necessario (Gestione Manuale)
● Necessità di collezionare e ordinare gli script incrementali parziali
➔ Gestione Manuale
● Necessità di tracciare lo stato del database obiettivo
➔ Non è necessario (Gestione Manuale)
● Inconsistenze tra stato database e sviluppi in caso di errori di esecuzione
➔ Gestibile con scripts di rollback
● Script contenenti Mix di Features (in caso di Build Schedulate)
➔ Script parziali atomici per feature
Code Def. (SC)
SSIS, OtherSSIS,
Other(Artif.)
Build
DB Def. Scripts
(SC)
Vertica
DB Inc. Scripts(Artif.)
DB Inc. Scripts
(SC)
INT Env
INTDB
DB Inc. Scripts(NO SC)
DB Inc. Scripts
(SC)
SSIS, Other(Artif.)
Release (INTEGRATION)
Tests
PROD Env
PRODDB
DB Inc. Scripts(Artif.)
SSIS, Other(Artif.)
Release (PRODUCTION)
Conclusioni
Cosa abbiamo imparato
● Sviluppare una visione è utile
➔ Per fare DevOps, bisogna essere Agile!
● … ma concretizzarla nella pratica il prima possibile
● Pragmatismo nella definizione degli obiettivi
● Iterare!
➔ Iterazione, feedback e sperimentazione➔ Strumenti utilizzabili
A
Grazie!
#DOH19
THANK YOU!