{"id":323,"date":"2020-04-06T16:33:21","date_gmt":"2020-04-06T15:33:21","guid":{"rendered":"https:\/\/www.gaetanopaterno.it\/?p=323"},"modified":"2020-05-02T23:17:26","modified_gmt":"2020-05-02T22:17:26","slug":"continuos-deployment-su-azure-app-service","status":"publish","type":"post","link":"https:\/\/www.gaetanopaterno.it\/?p=323","title":{"rendered":"Continuous Deployment su Azure App Service"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Introduzione<\/h1>\n\n\n\n<p>Nel precedente articolo abbiamo introdotto brevemente il servizio Web App di Azure e i metodi pi\u00f9 comuni per crearla (<a href=\"https:\/\/www.gaetanopaterno.it\/2020\/03\/29\/creare-unapp-web-su-azure\/\">link<\/a>).<\/p>\n\n\n\n<p>Il servizio Web App consente di creare, distribuire e ridimensionare rapidamente applicazioni Web, per dispositivi mobili e API di livello aziendale, in qualsiasi piattaforma e soddisfare rigorosi requisiti di prestazioni, scalabilit\u00e0, sicurezza e conformit\u00e0 usando al contempo una piattaforma completamente gestita e manutenuta.<\/p>\n\n\n\n<p>Da questo articolo iniziamo ad approfondire le caratteristiche del servizio Web App partendo dal Centro distribuzione e dai metodi di continuous deployment del codice sorgente dell\u2019applicazione web che stiamo sviluppando.<\/p>\n\n\n\n<p>Per accedere al Centro distribuzione:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Nel <a href=\"https:\/\/portal.azure.com\/\">portale<\/a> di Azure cercare e selezionare <strong>Servizi app<\/strong> (App Services).<\/li><li>Selezionare il servizio app che di desidera distribuire.<\/li><li>Nella pagina dell\u2019app selezionare <strong>Centro di distribuzione<\/strong> (Deployment Center) nel menu a sinistra.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_01.jpg\" alt=\"\" class=\"wp-image-326\" width=\"368\" height=\"203\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_01.jpg 490w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_01-300x165.jpg 300w\" sizes=\"(max-width: 368px) 100vw, 368px\" \/><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\">Componenti per la distribuzione<\/h1>\n\n\n\n<p>I tre componenti principali per la distribuzione del codice nel servizio Web App sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>L\u2019origine di distribuzione:<br>Un\u2019origine di distribuzione \u00e8 il percorso dove risiede il codice dell\u2019applicazione. Di solito l\u2019origine di distribuzione \u00e8 un repository ospitato dal software di controllo versione utilizzato dal team (ad esempio GitHub, BitBucket o Azure Repos). In scenari in cui il codice risiede su un computer locale o sul cloud, il servizio Web App supporta anche cartelle su OneDrive o Dropbox come origine di distribuzione.<br><img decoding=\"async\" width=\"378\" height=\"168\" src=\"\"><img decoding=\"async\" width=\"450\" height=\"200\" class=\"wp-image-327\" style=\"width: 450px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02.jpg 1181w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02-300x134.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02-1024x456.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02-768x342.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02-600x267.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_02-945x421.jpg 945w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/><\/li><li>Pipeline di compilazione:<br>Dopo aver scelto l\u2019origine di distribuzione, il passaggio successivo sar\u00e0 scegliere una Pipeline di compilazione che legga il codice sorgente e lo trasformi in codice eseguibile (ad esempio, Kudu, Azure Pipilines o GitHub Actions). Logicamente la scelta della pipeline dipende dallo stack del linguaggio e dai comandi specifici che possono eseguire (ad esempio la compilazione di codice, la modifica di HTML e JavaScript, l&#8217;esecuzione di test e la creazione di pacchetti di componenti).<br><img decoding=\"async\" width=\"378\" height=\"168\" src=\"\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"200\" class=\"wp-image-341\" style=\"width: 450px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03.jpg 1181w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03-300x134.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03-1024x456.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03-768x342.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03-600x267.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_03-945x421.jpg 945w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/><\/li><li>Meccanismo di distribuzione:<br>Il meccanismo di distribuzione \u00e8 l&#8217;azione utilizzata per inserire l&#8217;applicazione compilata nella directory \/home\/site\/wwwroot della Web App. La directory \/wwwroot \u00e8 un percorso di archiviazione montato condiviso da tutte le istanze della Web App. Quando il meccanismo di distribuzione inserisce l&#8217;applicazione in questa directory, le istanze ricevono una notifica per sincronizzare i nuovi file. La Web App supporta meccanismi di continuous deployment o continuous delivery utilizzando pipeline, canali FTP o di WebDeploy.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"481\" class=\"wp-image-329\" style=\"width: 800px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04.jpg 1620w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-300x181.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-1024x616.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-768x462.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-1536x924.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-600x361.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_04-945x569.jpg 945w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/li><\/ul>\n\n\n\n<p>A questo punto vediamo come \u00e8 possibile distribuire l&#8217;applicazione nella Web App che ho creato con le seguenti caratteristiche:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Stack di runtime: .NET Core 2.1 (LTS).<\/li><li>Sistema operativo: Windows.<\/li><li>Area geografica: Central US.<\/li><li>SKU e dimensioni: Standard S1.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"975\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_05.jpg\" alt=\"\" class=\"wp-image-328\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_05.jpg 753w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_05-232x300.jpg 232w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_05-600x777.jpg 600w\" sizes=\"(max-width: 753px) 100vw, 753px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Continuous Deployment (CI\/CD)<\/h1>\n\n\n\n<p>App Service di Azure consente la distribuzione continua dai repository GitHub, BitBucket, Azure Repos o Local Git eseguendo gli aggiornamenti pi\u00f9 recenti. Per utilizzare uno di questi repository basta autorizzare la Web App a connettersi al repository (\u00e8 sufficiente autorizzare il servizio di controlle del codice sorgente una sola volta).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/azure.microsoft.com\/it-it\/services\/devops\/repos\/\">Azure Repos<\/a> e <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/pipelines\/\">Azure Pipelines<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Selezionare <strong>Azure Repos<\/strong> come repository del codice sorgente e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"229\" class=\"wp-image-330\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_06.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_06.jpg 530w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_06-300x229.jpg 300w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Selezionare <strong>Azure Pipelines<\/strong> come provider di compilazione e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"204\" class=\"wp-image-331\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07.jpg 773w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-300x204.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-768x522.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-600x408.jpg 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Configurare la distribuzione selezionando l\u2019organizzazione, il progetto, il repository, il ramo e il framework di sviluppo dell\u2019applicazione Web e cliccare su <strong>continua<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1172\" height=\"858\" class=\"wp-image-332\" style=\"width: 1172px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08.jpg 1172w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08-300x220.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08-1024x750.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08-768x562.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08-600x439.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_08-945x692.jpg 945w\" sizes=\"(max-width: 1172px) 100vw, 1172px\" \/><\/figure><\/li><li>Dopo aver verificato i parametri di configurazione della distribuzione, nella pagina di riepilogo cliccare su <strong>Fine<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1588\" height=\"834\" class=\"wp-image-333\" style=\"width: 1588px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09.jpg 1588w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-300x158.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-1024x538.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-768x403.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-1536x807.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-600x315.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_09-945x496.jpg 945w\" sizes=\"(max-width: 1588px) 100vw, 1588px\" \/><\/figure><\/li><li>Cliccato su <strong>Fine<\/strong> partir\u00e0 la <em>Configurazione della distribuzione<\/em>.<br><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"129\" class=\"wp-image-334\" style=\"width: 450px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_10.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_10.jpg 517w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_10-300x86.jpg 300w\" sizes=\"(max-width: 450px) 100vw, 450px\" \/><\/li><li>Alla fine della <em>Configurazione della distribuzione<\/em> vedremo la pagina del Centro distribuzione aggiornarsi e arricchirsi con tutti gli strumenti e le informazioni necessari per la gestione della distribuzione appena configurata.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"625\" class=\"wp-image-335\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-300x98.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-1024x333.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-768x250.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-1536x500.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-600x195.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_11-945x308.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul>\n\n\n\n<p>Abbiamo cos\u00ec configurato una distribuzione in cui abbiamo utilizzato Azure Repos come repository e Azure Pipelines come Pipeline, ma il processo di <em>Configurazione della distribuzione<\/em> ha fatto molto di pi\u00f9 di quello che sembra.<\/p>\n\n\n\n<p>Su <strong>Azure DevOps<\/strong>, se apriamo il progetto che abbiamo selezionato durante la fase di configurazione della distruzione e nel menu a sinistra selezioniamo il servizio <strong>Pipelines<\/strong>, possiamo vedere che il configuratore a creato una pipeline per la compilazione del codice sorgente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12.jpg\" alt=\"\" class=\"wp-image-336\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_12-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1024\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13.jpg\" alt=\"\" class=\"wp-image-337\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-300x160.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-1024x546.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-768x410.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-1536x819.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-600x320.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_13-945x504.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Ma non solo, nel men\u00f9 di sinistra cliccando su <strong>Releases<\/strong> possiamo vedere che il configuratore ha anche creato una release per distribuire il codice compilato nella Web App.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14.jpg\" alt=\"\" class=\"wp-image-338\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_14-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15.jpg\" alt=\"\" class=\"wp-image-339\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_15-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1018\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16.jpg\" alt=\"\" class=\"wp-image-340\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-300x159.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-1024x543.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-768x407.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-1536x814.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-600x318.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_16-945x501.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/\">GitHub<\/a> e <a href=\"https:\/\/github.com\/features\/actions\">GitHub Actions<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Selezionare <strong>Azure Repos<\/strong> come repository del codice sorgente e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"229\" class=\"wp-image-342\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_17.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_17.jpg 520w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_17-300x229.jpg 300w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Avendo gi\u00e0 parlato precedentemente di Azure Pipelines, in questo caso selezioniamo <strong>GitHub Actions<\/strong> come provider di compilazione e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"205\" class=\"wp-image-343\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_18.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_18.jpg 773w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_18-300x205.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_18-768x524.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_18-600x409.jpg 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Configurare la distribuzione selezionando l\u2019organizzazione, il repository, il ramo, lo stack di runtime e la versione con cui \u00e8 sviluppata l\u2019applicazione Web e cliccare su <strong>continua<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1211\" height=\"704\" class=\"wp-image-344\" style=\"width: 1211px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19.jpg 1211w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19-300x174.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19-1024x595.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19-768x446.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19-600x349.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_19-945x549.jpg 945w\" sizes=\"(max-width: 1211px) 100vw, 1211px\" \/><\/figure><\/li><li>Dopo aver verificato i parametri di configurazione della distribuzione e prima di cliccare su <strong>Fine<\/strong> nella pagina di riepilogo, vi voglio far notare che il configuratore ha preparato uno script per la creazione della action su GitHub.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-345\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_20-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1533\" height=\"655\" class=\"wp-image-346\" style=\"width: 1533px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21.jpg 1533w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21-300x128.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21-1024x438.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21-768x328.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21-600x256.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_21-945x404.jpg 945w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" \/><\/figure><\/li><li>Cliccato su <strong>Fine<\/strong> partir\u00e0 la <em>Configurazione della distribuzione<\/em>.<br><img loading=\"lazy\" decoding=\"async\" width=\"318\" height=\"128\" src=\"\"><img loading=\"lazy\" decoding=\"async\" width=\"397\" height=\"160\" class=\"wp-image-347\" style=\"width: 397px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_22.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_22.jpg 397w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_22-300x121.jpg 300w\" sizes=\"(max-width: 397px) 100vw, 397px\" \/><\/li><li>Alla fine della <em>Configurazione della distribuzione<\/em> vedremo la pagina del Centro distribuzione aggiornarsi e arricchirsi con tutti gli strumenti e le informazioni necessari per la gestione della distribuzione appena configurata.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-348\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_23-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul>\n\n\n\n<p>Abbiamo cos\u00ec configurato una distribuzione in cui abbiamo utilizzato GitHub come repository e GitHub Actions come Pipeline e anche in questo il processo di Configurazione della distribuzione ha fatto molto di pi\u00f9 di quello che sembra, ma non del tutto.<\/p>\n\n\n\n<p>Apriamo il portale di <a href=\"https:\/\/github.com\/\">GitHub<\/a> e selezioniamo il repository che contiene il codice sorgente dell\u2019applicazione.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"974\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24.jpg\" alt=\"\" class=\"wp-image-349\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-1024x519.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-1536x779.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-600x304.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_24-945x479.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure>\n\n\n\n<p>Possiamo subito notare che il configuratore a creato una cartella <strong>.github\/workflows<\/strong> con all\u2019interno il file <strong>master_serviceappwebtraining.yml<\/strong> che contiene la configurazione del flusso di lavoro dell\u2019azione GitHub.<\/p>\n\n\n\n<p>Nel menu in alto clicchiamo su <strong>Actions<\/strong>, sulla sinistra, nell\u2019elenco dei Workflow, selezioniamo l\u2019azione creata dal configuratore \u201c<strong>Build and deploy ASP.Net Core app to Azure Web App \u2013 serviceappwebtraining\u201d<\/strong> e vedremo che il job \u00e8 fallito.<br><br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"720\" class=\"wp-image-350\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-300x113.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-1024x384.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-768x288.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-1536x576.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-600x225.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_25-945x354.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><br><br>Per capire il motivo per cui il job \u00e8 fallito clicchiamo su job \u201c<strong>Aggiunge o aggiorna la configurazione del flusso di lavoro\u2026<\/strong>\u201d&nbsp; e poi su \u201c<strong>build-and-deploy<\/strong>\u201d nel menu a sinistra.<br><br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1092\" class=\"wp-image-351\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-300x171.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-1024x582.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-768x437.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-1536x874.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-600x341.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_26-945x537.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/p>\n\n\n\n<p>Navigando nel log possiamo vedere che a fallire \u00e8 stata la build perch\u00e9 nel file yml di flusso non \u00e8 specificato il nome del progetto nei comandi <strong>dotnet build<\/strong> e <strong>dotnet publish<\/strong>. Non ci resta far altro che correggere il file yml nella cartella workflows, aggiungendo il nome del progetto \u201cserviceappwebtraining\u201d.<br><br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"2152\" class=\"wp-image-352\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-268x300.jpg 268w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-914x1024.jpg 914w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-768x861.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-1370x1536.jpg 1370w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-1827x2048.jpg 1827w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-600x673.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_27-945x1059.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><br>Dopo aver committato la modifica partir\u00e0 automaticamente un nuovo job che andr\u00e0 a buon fine e il codice eseguibile verr\u00e0 distribuito nella Web App.<br><br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"855\" class=\"wp-image-353\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-300x134.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-1024x456.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-768x342.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-1536x684.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-600x267.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_28-945x421.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/bitbucket.org\/\">BitBucket<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Selezionare <strong>BitBucket<\/strong> come repository del codice sorgente e cliccare su continua.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"230\" class=\"wp-image-354\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_29.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_29.jpg 515w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_29-300x230.jpg 300w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>In questo caso non ci verr\u00e0 chiesto il provider di compilazione perch\u00e9 Kudu \u00e8 l\u2019unica opzione al momento e verremo indirizzati direttamente allo step di configurazione della distribuzione. Configurare la distribuzione selezionando il team, il repository e il ramo e cliccare su <strong>continua<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-355\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_30-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><li>Dopo aver verificato i parametri di configurazione della distribuzione, nella pagina di riepilogo cliccare su <strong>Fine<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-356\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_31-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><li>Cliccato su <strong>Fine<\/strong> partir\u00e0 la <em>Configurazione della distribuzione<\/em>.<br><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"111\" class=\"wp-image-357\" style=\"width: 400px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_32.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_32.jpg 454w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_32-300x83.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/li><li>Alla fine della <em>Configurazione della distribuzione<\/em> vedremo la pagina del Centro distribuzione aggiornarsi e arricchirsi con tutti gli strumenti e le informazioni necessari per la gestione della distribuzione appena configurata.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-358\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_33-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul>\n\n\n\n<p>Se attendiamo qualche secondo potremmo vedere che Kudu andr\u00e0 a recuperare il codice sorgente dal repository BitBucket, compiler\u00e0 il codice sorgente e distribuir\u00e0 il codice eseguibile nell\u2019App Web. Cliccando nel menu in altro sul pulsante <strong>Sfoglia<\/strong> ci verr\u00e0 aperto il browser con l\u2019url dell\u2019App Web.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Local Git e Azure Pipelines<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Selezionare <strong>Local Git<\/strong> come repository del codice sorgente e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"227\" class=\"wp-image-359\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_34.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_34.jpg 519w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_34-300x227.jpg 300w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Avendo gi\u00e0 parlato precedentemente di Azure Pipelines, in questo caso selezioniamo <strong>GitHub Actions<\/strong> come provider di compilazione e cliccare su <strong>continua<\/strong>.<br><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"204\" class=\"wp-image-331\" style=\"width: 300px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07.jpg 773w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-300x204.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-768x522.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_07-600x408.jpg 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/li><li>Allo step di configurazione possiamo scegliere se utilizzare una nuova organizzazione di Azure DevOps oppure una esistente:<ul><li>Se scegliamo <strong>Nuovo<\/strong>, ci verr\u00e0 richiesto il nome dell\u2019organizzazione, il percorso di localizzazione e il framework di sviluppo dell\u2019applicazione web.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-360\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_35-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul><ul><li>Se scegliamo <strong>Esistente<\/strong>, ci verr\u00e0 richiesto l\u2019organizzazione, il progetto e il framework di sviluppo dell\u2019applicazione web.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-361\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_36-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul><\/li><li>Dopo aver cliccato su <strong>Continua<\/strong> e aver verificato i parametri di configurazione della distribuzione, nella pagina di riepilogo cliccare su <strong>Fine<\/strong>.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-362\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_37-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><li>Cliccato su <strong>Fine<\/strong> partir\u00e0 la <em>Configurazione della distribuzione<\/em>.<br><img loading=\"lazy\" decoding=\"async\" width=\"346\" height=\"99\" src=\"\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"144\" class=\"wp-image-363\" style=\"width: 400px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_38.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_38.jpg 404w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_38-300x108.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/li><li>Alla fine della <em>Configurazione della distribuzione<\/em> vedremo la pagina del Centro distribuzione aggiornarsi e arricchirsi con tutti gli strumenti e le informazioni necessari per la gestione della distribuzione appena configurata.<br><figure class=\"wp-block-image size-large is-style-zoooom\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"975\" class=\"wp-image-325\" style=\"width: 1920px;\" src=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39.jpg\" alt=\"\" srcset=\"https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39.jpg 1920w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-300x152.jpg 300w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-1024x520.jpg 1024w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-768x390.jpg 768w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-1536x780.jpg 1536w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-600x305.jpg 600w, https:\/\/www.gaetanopaterno.it\/wp-content\/uploads\/2020\/04\/distribuzione_automatizzata_39-945x480.jpg 945w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/figure><\/li><\/ul>\n\n\n\n<p>Abbiamo cos\u00ec configurato una distribuzione in cui, come nel primo punto, abbiamo utilizzato Azure Repos come repository e Azure Pipelines come Pipeline. Come nel primo punto se abbiamo utilizzato un progetto gi\u00e0 esistente, il configuratore si sar\u00e0 incaricato di creare le Pipeline di Build del codice sorgente e di Release del codice eseguibile; ma se abbiamo scelto di creare una nuova organizzazione il configuratore ha anche creato una nuova organizzazione e un nuovo progetto. In questo caso ho scelto la creazione di una nuova organizzazione, quindi il deploy \u00e8 fallito perch\u00e9 il branch \u00e8 vuoto. Al primo commit la distribuzione andr\u00e0 a buon fine.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusioni<\/h1>\n\n\n\n<p>In questo 2\u00b0 articolo su Azure App Service abbiamo visto i 4 casi di continuous deployment di un\u2019applicazione web utilizzando delle Pipeline di CI\/CD. Nel prossimo articolo vedremo il caso di distribuzione tramite FTP.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduzione Nel precedente articolo abbiamo introdotto brevemente il servizio Web App di Azure e i metodi pi\u00f9 comuni per crearla (link). Il servizio Web App consente di creare, distribuire e ridimensionare rapidamente applicazioni Web, per dispositivi mobili e API di livello aziendale, in qualsiasi piattaforma e soddisfare rigorosi requisiti di prestazioni, scalabilit\u00e0, sicurezza e conformit\u00e0 usando al contempo una piattaforma completamente gestita e manutenuta. Da questo articolo iniziamo ad approfondire le caratteristiche del servizio Web App partendo dal Centro distribuzione e dai metodi di continuous deployment del codice sorgente dell\u2019applicazione web che stiamo sviluppando. Per accedere al Centro distribuzione: Nel&hellip;<\/p>\n<p> <a class=\"more-link\" href=\"https:\/\/www.gaetanopaterno.it\/?p=323\">Leggi tutto<\/a><\/p>\n","protected":false},"author":1,"featured_media":329,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-323","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-articolo"},"_links":{"self":[{"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/posts\/323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=323"}],"version-history":[{"count":53,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/posts\/323\/revisions"}],"predecessor-version":[{"id":454,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/posts\/323\/revisions\/454"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=\/wp\/v2\/media\/329"}],"wp:attachment":[{"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gaetanopaterno.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}