Deploy di Asp.Net App su Azure da Mac

Chi ha paura della command line?

La scorsa settimana ho parlato di Asp.Net Core e del deployment su Azure alla conferenza organizzata da DotNetSide a Bari. Sono molto grato per questa possibilità e vorrei ringraziare tutti i partecipanti e gli organizzatori per la fantastica ospitalità.

Parlando del nuovo approccio allo sviluppo web Microsoft ho fatto vedere come creare un'applicazione Asp.Net direttamente su Mac, creando il progetto usando la command line e usando Git per deployarlo sul Cloud Microsoft.

Con solamente un'ora e poca connettività ho dovuto correre, quindi volevo ripetervi i passi della demo qui. Se non avete instalalto Asp.Net 5 sul vostro Mac, potete seguire le istruzioni ufficiali che trovate qui: https://docs.asp.net/en/latest/getting-started/installing-on-mac.html .

Il primo passo è installare yeoman (http://yeoman.io/ ),  un tool per lo scaffolding di progetti web, incluso Asp.Net Core:

npm install –g yo

Dopo l'installazione è possibile digitare “yo” nella console per lanciare il wizard interattivo che vi guiderà attraverso le opzioni disponibili. La prima cosa da fare è scaricare e installare uno specifico generator, nel nostro caso il generator “aspnet”:

Fatto questo è possibile scegliere il generator installato e seguire le istruzioni per creare una semplice applicazione Asp.Net:

Nell'esempio ho chiamato il progetto “test1”, quindi il generatore creerà una cartella con questo nome. Dopo essere entrati nella cartella è possibile scaricare le dipendenze del progetto usando il comando “dnu restore”. A questo punto digitando “dnx web” viene lanciata l'applicazione:

Adesso basta aprire il browser è andare all'indirizzo http://localhost:5000 per vedere l'applicazione creata:

Perfetto, adesso possiamo usare Visual Studio Code per inizializzare il repository Git per il progetto (ovviamente è possibile farlo anche dalla command line) e fare la commit di tutti i file localmente:

E' il momento di andare sul portale Azure all'indirizzo http://portal.azure.com e creare una Web App. Se non avete già una sottoscrizione potete registrarvi per una trial. Creare una Web App in Azure è davvero semplice, dovete solo seguire questi semplici passi:

Dopo qualche minuto potrete aprire la Web App per configurare le opzioni di deployment, nel nostro caso scegliamo di usare il “Local Git Repository” dai Deployment Source Settings:

Il sistema crea un repository locale, è possibile copiarne l'indirizzo dall'interfaccia (vedi la precedente GIF). Se è la prima volta che viene configurato un Local Git Repository su Azure, è necessario creare un account per la comunicazione in sicurezza tra Azure e la vostra macchina. Adesso basta solo aggiungere una configurazione "remote" nel repository Git locale alla vostra macchina e fare il push del progetto verso la Azure Web App. Chiamaremo questa configurazione remota “azure”:

La prima volta che fate il push del vostro codice verso Azure dovete attendere un pochino, il progetto è vuoto quindi il sistema deve elaborare tutte le configurazioni necessarie. Alla fine dell'operazione è possibile vedere il risultato nel portale Azure e l'applicazione creata all'indirizzo formato dal nome della Web App (nel nostro caso “aspnetfrommac”) e l'estensione .azurewebsites.net. Quindi nel nostro caso l'indirizzo sarà http://aspnetfrommac.azurewebsites.net.

Fantastico! Siete d'accordo? Questo è uno scenario tipico chiamato “continuous integration”, dove fate il commit e il push delle ultime modifiche che vengono rese continuamente disponibili in produzione. Wow… in produzione! Serio? Ovviamente non è il miglior scenario possibile, se ci sono problemi con il codice rischiamo di creare problemi al nostro cliente. Sarebbe una buona idea fare il deploy delle modifiche ad un indirizzo diverso e, dopo aver verificato che tutto funziona bene, spostare tutto in produzione.

Con Microsoft Azure questa operazione è davvero semplice, dovete semplicemente creare un “Deployment slot” dalla sezione “Publishing” del pannello “Settings", e creare tutte le aree di deploy che volete. Nel nostro caso creeremo un deployment slot chiamato “stage” e lo configureremo con un metodo di pubblicazione Local Git Repository (come fatto precedentemente).

La nuova area sarà disponibile all'indirizzo “http://aspnetfrommac-stage.azurewebsites.net”, quindi dobbiamo configurare un secondo Git remote per deployare verso quest'area. La chiameremo “azure-stage”:

Anche in questo caso bisogna attendere un po' perchè uno “stage” differente è comunque un'area vuota. Quando l'upload sarà finito potrete vedere lo stesso risultato del primo deploy anche a questo indirizzo.

Perfetto, adesso proviamo a simulare un modifica al progetto cambiando semplicemente una label, giusto per vedere qualcosa di diverso nell'area stage. Aprite Visual Studio Code, cambiate una view, fate il commit delle modifiche e il push del codice verso “azure-stage”:

Come potete vedere dalla precedente GIF, un semplice pulsante “Swap” nel portale Azure permette di scambiare l'area di produzione con quella di stage quando volete.

Le slide della mia sessione di Bari sono disponibili qui: http://www.slideshare.net/apomic80/deploy-an-aspnet-core-app-on-azure

Qualsiasi feedback è il benvenuto, apprezzo molto sia quelli positivi che quelli negativi, ma di più quelli negativi perchè mi aiutano a migliorare.

Happy coding