33
Continuous Integration con SQL Server Realizzare CI con SQL Server e prepararsi al DevOps

PASS Virtual Chapter - SQL Server Continuous Integration

Embed Size (px)

Citation preview

Page 1: PASS Virtual Chapter - SQL Server Continuous Integration

Continuous Integration con SQL Server

Realizzare CI con SQL Server e prepararsi al DevOps

Page 2: PASS Virtual Chapter - SQL Server Continuous Integration

Alessandro AlpiMicrosoft MVP – SQL Server dal 2008

Blog ITA: http://blogs.dotnethell.it/suxstellinoBlog ENG: http://suxstellino.wordpress.com/Website: http://www.alessandroalpi.net

CTO Engage IT Services S.r.l.www.engageitservices.itTeam leader (Agile)

CommunitiesGetlatestversion.it

Page 3: PASS Virtual Chapter - SQL Server Continuous Integration

Parleremo diDevelopment teams

Codice, codice, codice e tsql, tsql, tsqlSource control

Checkin, invio dei changesetBuild e automazione

Costruzione di un ambiente in automaticoTesting

Esecuzione degli unit test, sempre in automatico

Page 4: PASS Virtual Chapter - SQL Server Continuous Integration

Continuous integrationÈ una pratica che consiste nell’allineamento frequente (più volte al giorno) degli ambienti di lavoro di sviluppo verso l’ambiente condiviso. Si applica in contesti in cui lo sviluppo avviene tramite un sistema di versioning (version control system).

(fonte Wikipedia)

Page 5: PASS Virtual Chapter - SQL Server Continuous Integration

Continuous integration, workflow

SviluppoCommit/CheckinTrigger della BuildBuild del databaseCreazione del packageTest sul database

Page 6: PASS Virtual Chapter - SQL Server Continuous Integration

Best practicesCheck-in frequenti durante la giornataMerge dei cambiamenti per ogni check-inEvitare la «rottura» delle buildComunicare l’eventuale «rottura» a tutto il team (evitare get)Fare check-in solo se la build è «riparata»Notificare quando è possibile fare una get da source control

Page 7: PASS Virtual Chapter - SQL Server Continuous Integration

Continuous Integration e DBPoter fare get/commit dei cambiamenti come per il codiceLe build costruiscono una sandbox su cui eseguire i testCommit frequenti sulla linea principale come per il codiceRendere atomici database e applicazioneSfruttare strumenti condivisi (Visual Studio, Team Explorer)

Page 8: PASS Virtual Chapter - SQL Server Continuous Integration

VantaggiAnnulla la problematica «sul mio pc funziona» Consente l’automazione dei processiMigliora la qualità del codice (proprio per i processi frequenti)Rende subito disponibile il sorgente/db ad un nuovo devNon dimentica nessuna linea di sviluppoSepara il deploy dallo sviluppoAumenta la visibilità del «prodotto»

Page 9: PASS Virtual Chapter - SQL Server Continuous Integration

Serve un....Source Control Manager

Page 10: PASS Virtual Chapter - SQL Server Continuous Integration

Source control managerGestore delle versioni

cambiamenti del nostro codice (ddl, programmabilità)

cambiamenti di altri elementi (snippet, strumenti dev)

cambiamenti sui dati «statici» Entità condivisa in sviluppo (e team management)Dotato di interfaccia (anche grafica)Può sembrare scomodo su database

Page 11: PASS Virtual Chapter - SQL Server Continuous Integration

StrumentiVisual Studio Database ProjectsRed-Gate Source ControlApexSQL Source Control… Management studio non basta!Unitamente al Team Explorer (per chi usa Visual Studio)

Page 12: PASS Virtual Chapter - SQL Server Continuous Integration

Come inviamo i change....al Source Control Manager?

Page 13: PASS Virtual Chapter - SQL Server Continuous Integration

Il Team ExplorerIndipendentemente dal tool che si usa Team Explorer consente:

Migliore gestione dei changesetMigliore associazione dei changeset ai taskMiglior controllo sulle fasi di commit e di reviewGestione centralizzata delle policy di checkinSingle point per la gestione del team project

Page 14: PASS Virtual Chapter - SQL Server Continuous Integration

Management StudioIntegrato con SSMS

Page 15: PASS Virtual Chapter - SQL Server Continuous Integration

DEMOManagement Studio

Red Gate Source ControlVisual Studio Team Services

Page 16: PASS Virtual Chapter - SQL Server Continuous Integration

E ora....qualche test

Page 17: PASS Virtual Chapter - SQL Server Continuous Integration

Perchè unit test

Page 18: PASS Virtual Chapter - SQL Server Continuous Integration

Perchè unit testTestare funzionalità mission-critical di businessSviluppo evolutivoPer capire precocemente alcuni bug

Supporto di alert automaticiPer prevenire regressioni il più possibileAvere copertura di testScrivere in maniera «testabile» i nostri metodi

Page 19: PASS Virtual Chapter - SQL Server Continuous Integration

Cosa testare?Calcoli in procedure e funzioniConstraint (schema)Casi limite e comportamenti attesi sui datiSicurezzaStandard

Page 20: PASS Virtual Chapter - SQL Server Continuous Integration

StrumentiFramework

tSQLttSQLUnit (consigliato per SQL Server 2000)SQLCop (per gli standard e le metriche)

Tools SQLTest di Red-Gate (tSQLt + SQLCop)Unit test project con Visual Studio

Page 21: PASS Virtual Chapter - SQL Server Continuous Integration

DEMOtSQLt con SQL Test

Management Studio

Page 22: PASS Virtual Chapter - SQL Server Continuous Integration

Automatizziamo il tutto!

Page 23: PASS Virtual Chapter - SQL Server Continuous Integration

BuildBuild codice = compilazione automatica dopo check-inBuild database:

Parte al check-in dei changesetCrea un package (nuget in questo caso)Crea un database per i testValida gli oggetti creati

Page 24: PASS Virtual Chapter - SQL Server Continuous Integration

AutomazioneRed Gate SQL CI + plugin TFS + Script SC (DLM Automation Suite)

1) Al check-in su source control fa partire la build1) Crea automaticamente un database per i test1) Crea un package nuget2) Esegue i test3) Allinea il package su db di QA/Staging4) Pubblica il package su un nuget feed

Page 25: PASS Virtual Chapter - SQL Server Continuous Integration

Processo completo

Thanks to Steve Jones

using System;using System.Collections.Generic;using System.Text;using eBay.Service.Core.Sdk;using eBay.Service.Core.Soap;namespace Trading_Samples{ class Program { static void Main(string[] args) { MakeGetOrders(); Console.ReadLine();

Create table Orders( OrderID int, OrderDate datetime, salesrep int, customerid int, status tnyint)

Create procedure GetOrders @o datetimeAsBeginSelect * from ordersWhere orderdate > @o

Development

Dev

Testing

Alter table OrdersAdd status tinyint;

Create procedure GetOrders…..

QA

Build

Commit

Test

Publish

Continuous Integration

Page 26: PASS Virtual Chapter - SQL Server Continuous Integration

Processo completo

Thanks to Steve Jones

using System;using System.Collections.Generic;using System.Text;using eBay.Service.Core.Sdk;using eBay.Service.Core.Soap;namespace Trading_Samples{ class Program { static void Main(string[] args) { MakeGetOrders(); Console.ReadLine();

Create table Orders( OrderID int, OrderDate datetime, salesrep int, customerid int, status tnyint)

Create procedure GetOrders @o datetimeAsBeginSelect * from ordersWhere orderdate > @o

Development

Dev

Testing

Alter table OrdersAdd status tinyint;

Create procedure GetOrders…..

QA

Build

Commit

Test

Publish

Continuous Integration

Page 27: PASS Virtual Chapter - SQL Server Continuous Integration

Continuous Integration!

Tutto automatizzato

Page 28: PASS Virtual Chapter - SQL Server Continuous Integration

CI e DevOpsSolo buzzword?

Automazione vs tempi ottimizzatiEffort vs ripetibilità e affidabilità

Senza CI non esiste DevOpsRilasciare i change non appena disponibiliAutomatizzare il processo di delivery.. verso OperationsIl DevOps continua anche dopo il Delivery

Page 29: PASS Virtual Chapter - SQL Server Continuous Integration

ConclusioniCapire quale source control è il migliore per noi:

già utilizzato in passato?servizio oppure on-premises?costi?

Capire quale strumento per gestire il source control del database:

curva di apprendimento dell’IDE usatocosticomodità (dati statici, filtri, team management)

Page 30: PASS Virtual Chapter - SQL Server Continuous Integration

ConclusioniPer il testing:

Esistono tool per testareEsiste la possibilità di isolareÈ semplice creare un database nuovo su cui

testareMiglioriamo la qualità del nostro softwarePreveniamo le regressioni

Page 31: PASS Virtual Chapter - SQL Server Continuous Integration

Perché non usare un source control?!Perché non testare?!

Perché non automatizzare?!

Page 32: PASS Virtual Chapter - SQL Server Continuous Integration

RisorseSource control resourceshttps://msdn.microsoft.com/it-it/library/dn894015.aspx (Article on Source Control)http://www.red-gate.com/products/sql-development/sql-source-control/http://apexsql.com/sql_tools_source_control.aspxhttp://suxstellino.wordpress.com/tag/alm/http://blogs.dotnethell.it/suxstellino/Category_2927.aspx

Unit testing resourceshttp://www.red-gate.com/products/sql-development/sql-test/

http://tsqlt.org/

http://sourceforge.net/projects/tsqlunit/

https://msdn.microsoft.com/it-it/library/mt169842 (Article on Unit Testing)

http://en.wikipedia.org/wiki/Unit_testing

https://www.simple-talk.com/sql/t-sql-programming/getting-started-testing-databases-with-tsqlt/

https://github.com/chrisoldwood/SS-Unit

CI resourceshttp://msdn.microsoft.com/it-it/library/dn383992.aspx (Article on CI)http://www.red-gate.com/products/dlm/dlm-automation-suite/http://www.red-gate.com/products/dlm/dlm-automation-suite/sql-cihttp://www.red-gate.com/products/dlm/dlm-automation-suite/sql-releasehttp://documentation.red-gate.com/display/DAS/DLM+Automation+Suitehttps://marketplace.visualstudio.com/items?itemName=redgatesoftware.redgateDlmAutomationBuild

Page 33: PASS Virtual Chapter - SQL Server Continuous Integration

GRAZIE!Continuate a seguire i PASS GLOBAL Italian Virtual Chapters

http://globalitalian.sqlpass.org/