In quest'ultima mini-serie abbiamo iniziato a trattare di alcuni argomenti interessanti. All'inizio abbiamo visto come, sfruttando le matrici, sia possibile eseguire lo stesso processo definito dalla pipeline in condizioni differenti e in parallelo. Aggiungendo i container, inoltre, la pipeline è in grado di girare su una immagine ben precisa senza che questa richieda determinate dipendenze all'host che eseguirà effettivamente la pipeline. Ebbene, in quest'ultimo episodio vediamo come combinare le due opzioni per realizzare uno scenario interessante: testare una libreria in condizioni differenti.
Sembra infatti scontato, soprattutto dopo l'introduzione di .NET 5, ma una libreria deve poter essere eseguita ovunque, sia che si parli di Windows vs. Linux vs. macOS, sia che si parli di versioni differenti di .NET Core stesso, così da assicurarci che la libreria funzioni con qualsiasi progetto target che viene supportato. Vediamo un esempio:
pool: vmImage: 'ubuntu-latest' strategy: matrix: DotNetCore22: containerImage: mcr.microsoft.com/dotnet/core/sdk:2.2 DotNetCore30: containerImage: mcr.microsoft.com/dotnet/core/sdk:3.0 DotNetCore31: containerImage: mcr.microsoft.com/dotnet/core/sdk:3.1 DotNetCore50: containerImage: mcr.microsoft.com/dotnet/core/sdk:5.0 container: $[ variables['containerImage'] ] resources: containers: - container: sql image: mssql/server:2019-latest options: 'ACCEPT_EULA=Y SA_PASSWORD=yourStrong(!)Password' services: sql: sql steps: - script: dotnet restore - script: dotnet build -c release env: CONNECTIONSTRING: sql:1433
Come si può notare, l'esempio è esattamente un mix di quello che abbiamo già visto nei precedenti script. Infatti, inizialmente siamo andati a definire una matrice che specifica il valore della variabile containerImage, che varierà in base alla versione di .NET SDK. Questa stessa variabile viene poi messa in input dinamicamente (da cui l'uso $[] come sintassi) sulla property container della pipeline: in questo modo, la pipeline verrà eseguita su immagini di Docker contenenti versioni diverse dell'SDK di .NET Core e, quindi, sarà possibile lanciare i vari comandi di restore e build in contesti diversi. Da notare come, invece, l'uso del servizio relativo a SQL Server per l'esecuzione dei test sia invariato e rimanga comunque un service container in ogni caso.
Questi esempio risulta comodo non solo per verificare il funzionamento tra diverse versioni dell'SDK, ma anche in scenari in cui vogliamo testare tra più sistemi operativi, versioni diverse delle dipendenze (es. database diversi, versioni diverse dello stesso database) o altro ancora, per verificare il massimo della compatibilità con il minimo sforzo, mantenendo un singolo processo di esecuzione.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Condividere i workflow tra più repository in GitHub
Innestare una query nel metodo Contains di Entity Framework Core
Definire lo stile CSS in base alle dimensioni del container
Chiamare un endpoint ASP.NET Core protetto da Certificate Authentication
Creare attributi generici in C#
Le novità di .NET 7 e C# 11
Bloccare una pull request che arriva da branch non definiti in GitHub
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Migrare un repository git da Azure DevOps a GitHub
Intercettare gli eventi di creazione degli oggetti con Entity Framework 7
Taggare automaticamente un repository con un workflow di GitHub
Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub
I più letti di oggi
- Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
- Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
- Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
- Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
- Elencare le container images installate in un cluster di Kubernetes
- Recuperare un elemento inserito nella cache del browser tramite API JavaScript
- Controllare gli accessi IP alle app con Azure Container Apps
- Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
- Determinare lo stato di un pod in Kubernetes
- .NET Conference Italia 2022 - Milano e Online