Ci sono alcuni scenari, come ad esempio lo sviluppo e la distribuzione di librerie, che richiedono che i test vengano eseguiti su diversi tipi di condizioni per assicurarci che la librerie siano sempre funzionanti. Questo è vero storicamente, ma si è ancor di più accentuato dall'introduzione di .NET Core in quanto il codice della libreria può girare non più solo su Windows, ma anche su altri sistemi operativi.
Per simulare quest'ultimo scenario, è vero che per quanto riguarda le pipeline possiamo utilizzare i template YAML. Questi infatti prevedono una sequenza di operazioni e possiamo anche fornire in input diversi tipi di parametri, fra cui l'agent con cui eseguire le operazioni. Tuttavia, Azure DevOps fornisce out-of-the-box una strategia, definita "a matrice", che permette di eseguire lo stesso flusso di codice in condizioni differenti.
strategy: matrix: linux: imageName: 'ubuntu-latest' mac: imageName: 'macos-10.14' windows: imageName: 'windows-latest' pool: vmImage: $(imageName) steps: - script: dotnet restore - script: dotnet build --configuration Debug --no-restore - script: dotnet test --configuration Debug - script: dotnet publish --configuration Release
Come si può vedere dall'esempio, ci è sufficiente specificare a livello di job la keyword strategy per spiegare all'agent che ci saranno diverse modalità di esecuzione. In questo caso, stiamo solamente andando a definire delle variabili e, queste, verranno usate nei passaggi successivi. Infatti, il parametro imageName prende un valore diverso rispetto alla configurazione della matrice e questo verrà riutilizzato come parametro del pool, facendo in modo che la pipeline venga eseguita in automatico non solo su un agent, ma addirittura su tre, mantenendo lo stesso processo di build e release definito in precedenza per buildare, ad esempio, solo con Windows.
Sebbene il job di default sia solamente uno, possiamo vedere come Azure DevOps all'avvio della pipeline schedulerà in automatico l'esecuzione su tutti gli agent specificati dalla matrice:

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare una qualunque lista per i parametri di tipo params in C#
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Ridurre il reflow ottimizzando il CSS
Managed deployment strategy in Azure DevOps
Il nuovo controllo Range di Blazor 9
Testare l'invio dei messaggi con Event Hubs Data Explorer
Scrivere selettori CSS più semplici ed efficienti con :is()
Ottenere un token di accesso per una GitHub App
Proteggere le risorse Azure con private link e private endpoints
Eliminare record doppi in Sql Server
Utilizzare Container Queries nominali
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub