Le pipeline di continuous integration / continuous delivery (CI/CD) sono alla base dello sviluppo software moderno, offrendo valore aziendale in molti modi: versioni semplificate, software con meno bug e automazione che elimina molti passaggi manuali lunghi e soggetti a errori. È certamente possibile sviluppare software senza CI/CD, ma una pipeline CI/CD rende la vita molto più semplice se si utilizza Agile, app cloud native o architetture applicative distribuite come i microservizi.
Non esiste un approccio univoco per la creazione di una pipeline CI/CD. Un tipico esempio di pipeline CI/CD si basa su alcuni componenti prescrittivi – un motore CI, repository di codice, framework di test – ma il piano CI/CD di un’organizzazione probabilmente si ramificherà, a seconda della sua infrastruttura e dei suoi strumenti e della scelta tra continuous delivery o deployment. Le organizzazioni che si affidano ad applicazioni e servizi basati su cloud potrebbero voler eseguire CI/CD tramite la piattaforma cloud preferita.
La maggior parte dei provider cloud offre un modello per configurare rapidamente una pipeline CI/CD. Si consideri, ad esempio, una pipeline CI/CD che usa GitHub e distribuisce un’applicazione in Microsoft Azure. Un servizio chiamato DevOps Starter fornisce modelli di avvio CI/CD che consentono di integrarsi con GitHub o Azure DevOps e avviare un repository con un’applicazione demo dal codice sorgente insieme alla definizione della pipeline come codice, e all’infrastruttura come codice (modelli di Azure Resource Manager). In questo caso, il servizio unisce tutto per presentare una pipeline di distribuzione end-to-end.
Premesso questo, iniziamo questa descrizione dettagliata su come configurare una pipeline CI/CD in Azure con GitHub per il controllo della versione e il repository. Per prima cosa, vai al portale di Azure, cerca devops e seleziona il servizio “DevOps Starter” (figura 1).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06112715/5588-immagine-1.jpg)
Nel riquadro del servizio DevOps Starter, fai clic su Aggiungi che presenta una serie di modelli precaricati tra cui scegliere. Seleziona il linguaggio di programmazione per la tua applicazione: in questo esempio, ho scelto .NET, oltre a GitHub per il controllo della versione e GitHub Actions per le pipeline (anche Azure DevOps è un’opzione). Premi il pulsante Avanti: Framework (figura 2)
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06112741/5588-immagine-2.jpg)
Ora scegli il framework ASP.NET Core per la app .NET, poiché si tratta di un framework multipiattaforma; in seguito, sarà possibile distribuire l’applicazione su container Linux. A questo punto fai clic su Avanti: Servizio (figura 3).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06112814/5588-immagine-3.jpg)
Puoi scegliere tra diversi servizi di Azure per distribuire la tua applicazione. In questo caso, sceglieremo App Web per container, che distribuisce i container in un servizio app di Azure, una piattaforma di hosting di applicazioni gestite. Fai clic su Avanti: Crea (figura 4).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06112852/5588-immagine-4.jpg)
Poiché abbiamo scelto GitHub per il controllo della versione e le pipeline, il passaggio successivo ci chiederà di autorizzare la connessione a GitHub nel portale di Azure. Fai clic su Autorizza e accedi a GitHub (figura 5).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06112926/5588-immagine-5-640x360.jpg)
Dopo aver autorizzato GitHub, vengono presentati diversi parametri (gli ultimi tre sono specifici per la distribuzione su Azure):
- Organizzazione: organizzazione GitHub da utilizzare
- Repository: specificare il nome del repository (Azure non genera un nome per te)
- Abbonamento:abbonamento Azure per ospitare le risorse cloud
- Nome app Web: nomeunivoco in cui verrà ospitata l’applicazione
- Posizione: un’area di Azure specifica in cui verranno create le risorse cloud richieste
Compila i dettagli e fai clic su Rivedi + Crea (figura 6).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06113007/5588-immagine-6.jpg)
Al termine del deployment, possiamo tornare al servizio DevOps e vedere che la nostra istanza è stata creata (figura 7).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06113112/5588-immagine-7.jpg)
Facendo clic sull’istanza viene visualizzata una pagina di destinazione con i dettagli del flusso di lavoro GitHub e le risorse di Azure corrispondenti (figura 8).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06113152/5588-immagine-8.jpg)
Confermiamo a questo punto che il servizio di avvio di Azure ha creato un repository GitHub nell’organizzazione specificata e ha configurato una pipeline CI/CD di GitHub Actions per creare, testare e rilasciare il nostro software. Ecco il layout del repository:
- .github/workflows: cartella che contiene la definizione della pipeline
- Applicazione: cartella che ospita il codice sorgente dell’app, i test unitari e i test funzionali
- ArmTemplates:cartella con l’infrastruttura come definizioni di codice da distribuire al nostro provider cloud (Azure) (figura 9)
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06113228/5588-immagine-9.jpg)
L’immagine seguente mostra l’attività CI/CD mentre viene eseguita tramite GitHub Actions (figura 10).
![](https://img.zerounoweb.it/wp-content/uploads/2021/07/06113252/5588-immagine-10.jpg)
Crea, distribuisci e testa in una pipeline CI/CD per Azure e GitHub
Vediamo di capire cosa sta succedendo all’interno di una singola build CI/CD nel nostro caso e nelle sue tre fasi.
Fase di costruzione
Questo lavoro esegue una serie di passaggi per creare l’applicazione:
- Check-out del codice sorgente dal master branch.
- Autenticati in Azure (o nel tuo provider cloud preferito). GitHub Actions supporta immediatamente i principali provider di servizi cloud.
- Crea ed esegui unit test utilizzando l’interfaccia della riga di comando (CLI) di dotnet. In questo esempio, il framework di test è MSTest, ma la dotnet CLI può funzionare con diversi framework di test ed eseguirli allo stesso modo. Puoi anche utilizzare uno strumento di compilazione diverso per le tue applicazioni .NET, come Cake for GitHub Actions, invece della CLI dotnet.
- Utilizzare i modelli di Azure Resource Manager (ARM) per distribuire il registro contenitori richiesto. Poiché utilizziamo Azure per distribuire il registro contenitori e come piattaforma gestita per ospitare la nostra applicazione, utilizziamo i modelli ARM per distribuire la nostra infrastruttura in modo idempotente. Per CI/CD con altri provider cloud come AWS o Google Cloud Provider, potremmo utilizzare i modelli AWS CloudFormation o Terraform, ad esempio.
- Recupera le credenziali del registro contenitori dal provider cloud ed esegui l’autenticazione.
- Crea l’immagine del contenitore e inviala al registro contenitori.
Fase di distribuzione
La responsabilità principale in questa fase è prendere l’elemento (l’immagine del contenitore dal lavoro precedente) e distribuirlo nell’ambiente sul provider cloud, con le risorse cloud richieste, per ospitare l’istanza dell’app. Le funzioni specifiche includono:
- Check-out del master branch.
- Autenticati al provider cloud.
- Usa i modelli ARM per distribuire l’istanza del servizio app cloud richiesta.
- Recupera le credenziali del registro del contenitore.
- Distribuire l’immagine del contenitore pubblicata nel registro contenitori nell’istanza del servizio app.
Fase di test funzionale
Questo lavoro esegue vari test funzionali per convalidare il funzionamento dell’app distribuita. I passaggi includono:
- Check-out del master branch
- Configura la versione .NET
- Usa PowerShell per aggiornare le impostazioni di esecuzione in modo che puntino alla nostra istanza dell’applicazione
- Esegui test di funzionalità utilizzando dotnet CLI
Questo esempio di pipeline CI/CD in Azure con GitHub coinvolge solo un singolo ambiente, ma è anche possibile concatenare più ambienti assieme.