In vista del mio speech a SQL Saturday #777 ho iniziato a lavorare alla demo. Dato che le demo con i container e le pipeline di CI/CD spesso e volentieri mi abbandonano nei momenti più importanti ho deciso di prendermi qualche giorno di preavviso :)

Diciamo che pensavo di metterci più tempo, ma dopo solo 4hh sono riuscito a mettere in piedi il 90% della demo. Ho dovuto rovistare nei meandri dei repository GitHub dei vari product group ma alla fine tutte le tech più nuove funzionano nell’armonia più totale.

Quali sono gli ingredienti della demo? Beh molto semplicemente:

  • Docker
  • SQL Server Data Tools di Visual Studio (per avere i SQL Database project)
  • SqlPackage - utility di SQL che utilizziamo per orchestrare l’import del nostro file .dacpac contente lo schema del DB
  • Azure Dev Ops per la build & release pipeline

Il setup è semplice. Si parte sempre da un SQL Server Database project configurato sul TF 4.5.2 dove abbiamo opportunamente riportato tutti gli script di creazione tabelle, viste, schema, ecc del nostro database. Allo stesso livello della solution poi abbiamo il classico Dockerfile e una serie di artifact a contorno che permettono:

  • Installazione dell’utility SqlPackage sul container SQL Server 2017 Developer Edition
  • Script Powershell per l’inizializzazione del Database e importazione .dacpac
  • Seed dei dati sul DB di destinazione

La cosa più rognosa di tutto questo “step” di preparazione della demo è il fatto che nelle ultime immagini di SQL Server che Microsoft ha rilasciato, l’utility SqlPackage non è più preinstallata. Pertanto, ho dovuto adattare il mio Dockerfile affinchè eseguisse l’installazione dell’ MSI e successivamente andare a vedere il setup posiziona l’eseguibile che mi interessava. Come potete vedere dal file Powershell nella cartella artifacts, rispetto alla versione dell’immagine precedente cambia solo il numero di versione - fortunatamente. Maggiori info su questa breaking change li trovate nella issue ufficiale su GitHub qui. Il commento di risposta invece, che mi ha aiutato a capire come risolvere il mi problema invece è questo qua.

Di seguito la folder structure. Ovviamente tutto il codice è hostato su GitHub e l’indirizzo del repository è questo. Nel prossimo post dettaglierò brevemente anche le pipeline che andrò a creare per il deploy su Docker EE che per comodità ho installato su una Docker Farm su Azure.