Negli ultimi anni, l’adozione di pratiche DevOps ha trasformato il modo in cui le aziende sviluppano, distribuiscono e gestiscono le applicazioni. Azure, la piattaforma cloud di Microsoft, fornisce un insieme potente di strumenti per facilitare l’integrazione del DevOps nei processi aziendali. In questo articolo esploreremo come integrare DevOps su Azure, concentrandoci su Azure DevOps e GitHub Actions, e su come automatizzare il ciclo di vita delle applicazioni e le pipeline di deployment continuo.
Panoramica di Azure DevOps e GitHub Actions
Azure DevOps
Azure DevOps è una suite di strumenti che supporta l’intero ciclo di vita dello sviluppo software. Consente di pianificare, sviluppare, testare e rilasciare software in modo più efficiente, integrando strumenti per la gestione dei progetti, il controllo di versione e l’automazione del rilascio. Le componenti principali di Azure DevOps includono:
- Azure Repos: repository Git per il controllo del codice sorgente.
- Azure Pipelines: uno strumento potente per automatizzare il build, il test e il rilascio di applicazioni in ambienti multipli.
- Azure Boards: gestione agile dei progetti, che include backlog, sprint e tracking delle attività.
- Azure Artifacts: gestione dei pacchetti, per la condivisione di artefatti tra diversi team.
- Azure Test Plans: per la pianificazione, il monitoraggio e l’esecuzione dei test.
GitHub Actions
GitHub Actions è un servizio di automazione integrato in GitHub che consente di creare workflow personalizzati direttamente all’interno dei repository. Offre una grande flessibilità, permettendo di automatizzare il ciclo di vita delle applicazioni, dallo sviluppo al deployment, integrandosi con i repository di codice GitHub.
Entrambi gli strumenti offrono funzionalità avanzate per implementare le pratiche DevOps, ma con alcune differenze fondamentali. Azure DevOps è una piattaforma completa che offre una soluzione end-to-end, mentre GitHub Actions è profondamente integrato con GitHub, il più grande host di repository Git, e permette flussi di lavoro personalizzati basati su eventi.
Automazione del Ciclo di Vita delle Applicazioni
Automatizzare il ciclo di vita delle applicazioni è uno dei pilastri fondamentali delle pratiche DevOps. Su Azure, l’automazione delle pipeline può essere gestita sia attraverso Azure Pipelines che GitHub Actions.
Continuous Integration (CI) e Continuous Deployment (CD)
L’adozione di CI/CD (Continuous Integration/Continuous Deployment) permette di avere un ciclo di sviluppo continuo, con build e test automatici per ogni modifica al codice. Questo riduce i tempi di rilascio e minimizza i rischi di errore.
- Integrazione Continua (CI): Ogni volta che viene effettuata una modifica al codice (come una pull request o un commit), Azure Pipelines o GitHub Actions può eseguire automaticamente i test e verificare la build, assicurando che il codice sia sempre stabile e pronto per essere distribuito.
- Deployment Continuo (CD): Dopo il processo di build e test, una pipeline di CD distribuisce automaticamente l’applicazione nell’ambiente di destinazione, come un cluster Kubernetes o un’app Web su Azure. Questo processo assicura che ogni modifica approvata venga rapidamente rilasciata in produzione, minimizzando l’intervento manuale.
Esempi Pratici di Automazione con Azure DevOps e GitHub Actions
Automazione con Azure DevOps
Con Azure Pipelines è possibile definire una pipeline di CI/CD in modo semplice utilizzando file YAML. Un esempio pratico potrebbe essere la pipeline di una web app che compila, testa e distribuisce automaticamente il codice su Azure App Service:
<code data-enlighter-language="yaml" class="EnlighterJSRAW"> trigger: branches: include: - main pool: vmImage: 'ubuntu-latest' steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '5.x' - script: dotnet build --configuration Release displayName: 'Build' - script: dotnet test displayName: 'Run Tests' - task: AzureWebApp@1 inputs: azureSubscription: 'AzureSubscriptionName' appName: 'MyWebApp' package: '$(System.DefaultWorkingDirectory)/bin/Release' </code>
Questo esempio mostra una pipeline che si attiva automaticamente ogni volta che viene eseguito un push sul branch main
. La pipeline compila il codice .NET, esegue i test e distribuisce l’applicazione su Azure App Service.
Automazione con GitHub Actions
Analogamente, un workflow di GitHub Actions può essere utilizzato per gestire una pipeline CI/CD. Ecco un esempio di file di configurazione per GitHub Actions che esegue build, test e deploy:
name: CI/CD Pipeline on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: '5.0' - name: Build run: dotnet build --configuration Release - name: Test run: dotnet test deploy: runs-on: ubuntu-latest needs: build steps: - uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Deploy to Azure Web App run: | az webapp deploy --name MyWebApp --resource-group MyResourceGroup --src-path ./bin/Release
In questo esempio, la pipeline di GitHub Actions si attiva ogni volta che viene effettuato un push sul branch main
. Dopo aver compilato e testato l’applicazione, questa viene distribuita automaticamente su un’app Web su Azure.
Automazione delle Risorse su Azure
Oltre alla gestione del ciclo di vita del software, Azure offre potenti strumenti per l’automazione delle risorse. Grazie all’integrazione con strumenti come Azure Resource Manager (ARM), Terraform e Bicep, è possibile automatizzare la creazione, configurazione e gestione delle risorse cloud su Azure.
Ad esempio, è possibile definire un’infrastruttura come codice (IaC) tramite modelli ARM, e utilizzare Azure Pipelines per distribuire automaticamente queste risorse come parte del processo CI/CD.
Esempio di Automazione con ARM Template
Ecco un esempio di pipeline che utilizza Azure Pipelines per distribuire un modello ARM e creare un’applicazione su Azure:
trigger: branches: include: - main pool: vmImage: 'ubuntu-latest' steps: - task: AzureResourceManagerTemplateDeployment@3 inputs: deploymentScope: 'Resource Group' azureResourceManagerConnection: 'AzureSubscriptionName' action: 'Create Or Update Resource Group' templateLocation: 'Linked artifact' csmFile: '$(System.DefaultWorkingDirectory)/arm-template.json' resourceGroupName: 'MyResourceGroup'
Questa pipeline distribuisce automaticamente un modello ARM che descrive l’infrastruttura necessaria, come macchine virtuali, database e reti.
Conclusione
L’integrazione di DevOps su Azure, utilizzando strumenti come Azure DevOps e GitHub Actions, consente di ottimizzare l’intero ciclo di vita delle applicazioni e di automatizzare i processi di deployment continuo. Grazie all’automazione dei workflow e delle risorse, le aziende possono migliorare la velocità, la qualità e l’affidabilità delle proprie applicazioni. Indipendentemente dal fatto che si utilizzi Azure Pipelines o GitHub Actions, la chiave è adottare un approccio orientato all’automazione per ottenere un vantaggio competitivo nel cloud computing.
Se hai domande o desideri una consulenza dedicata, contattaci!