Nelle pipeline di Azure DevOps, soprattutto nel momento in cui dobbiamo scrivere dei template per rendere più riutilizzabile i nostri processi automatici, ci si può trovare nella necessità di dover fare delle scelte in base a determinate condizioni. Per fare ciò, possiamo utilizzare l'istruzione if per definire delle condizioni ed eseguire operazioni distinte.
variables: ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: poolToUse: 'Azure Pipelines' ${{ else }}: poolToUse: 'ManagedDevOpsPool' jobs: - job: pool: ${{ variables.poolToUse }} steps: - script: echo "Hello!"
In questo caso stiamo definendo una variabile poolToUse che verrà inizializzata con il valore Azure Pipelines se la pipeline sta girando nel contesto di una PullRequest, altrimenti verrà inizializzata con il valore ManagedDevOpsPool per essere eseguita su un agent custom.
La sintassi disponibile non ci consente di utilizzare l'espressione if come se fosse un operatore ternario, in modo da eseguire le operazioni in una riga sola e rendere il codice più flessibile. Tuttavia, in un recentissimo aggiornamento di Azure DevOps (il numero 248) è stata rilasciata l'espressione iif:
variables: poolToUse: ${{ iif(eq(variables['Build.Reason'], 'PullRequest'), 'Azure Pipelines', 'ManagedDevOpsPool')}} jobs: - job: pool: ${{ variables.poolToUse }} steps: - script: echo "Hello!"
Con questo nuovo operatore, infatti, possiamo definire nel primo parametro l'espressione che verrà valutata, nel secondo il valore da assegnare nel momento in cui l'espressione risultasse vera e, nel terzo parametro, il valore da restituire ad espressione valutata falsa.
Questo nuovo metodo semplifica notevolmente molti template e rende più leggibile il codice, anche se non va a sostituire completamente l'operatore if "standard" che rimane da utilizzare nel momento in cui dobbiamo eseguire task all'interno della pipeline secondo una condizione o l'altra.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Migrare una service connection a workload identity federation in Azure DevOps
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Path addizionali per gli asset in ASP.NET Core MVC
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Assegnare un valore di default a un parametro di una lambda in C#
Criptare la comunicazione con mTLS in Azure Container Apps
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Miglioramenti nell'accessibilità con Angular CDK
Gestione dei nomi con le regole @layer in CSS
Le novità di Angular: i miglioramenti alla CLI
Creare una libreria CSS universale: Cards