Negli script precedenti abbiamo affrontato il tema relativo alla condivisione delle variabili prodotte da script (o task), in modo che esse siano riutilizzabili da altri task successivi, indipendentemente dal fatto che essi siano contenuti all'interno dello stesso job o di job differenti nella pipeline.
Questa condivisione delle variabili è sempre stata possibile, anche in passato, tramite le pipeline "classiche", quelle che sfruttano l'interfaccia grafica e, pertanto, non rappresentano una grossa novità. Tuttavia, la questione diventa interessante quando parliamo della visibilità della stessa variabile tra stage differenti.
Se guardiamo al passato, nelle pipeline di release, ad esempio, salvare una variabile in modo che fosse visibile su altri stage richiedeva l'uso delle API REST di Azure DevOps, così da modificare il processo di release in corso. Nelle pipeline YAML, invece, fino a poche settimane fa non avevamo nemmeno le API a disposizione: era necessario sfruttare un workaround per salvare le variabili come JSON all'interno di uno stage A, quindi recuperarle dagli artifact nello stage B, decodificarle dal JSON e ricostruirle prima di poterle leggere e sfruttare.
Entrambi i meccanismi sono sicuramente scomodi e richiedono un certo livello di automation che comunque impone una serie di limiti importanti, sopratutto nelle nuove pipeline YAML. Con l'update 168 di Azure DevOps, agli inizi di Maggio 2020, Microsoft ha finalmente abilitato la possibilità di condividere le variabili tra stage, in modo molto simile a quanto abbiamo visto nello script precedente per i job. Uno dei requisiti, come visto in precedenza, è quello di creare una variabile di output, dopodichè potremo andarla a leggere, nello stage successivo, tramite l'attributo stageDependencies, a cui dobbiamo specificare il nome dello stage e del job tramite il quale la variabile è stata inizialmente creata:
stages: - stage: A jobs: - job: JA steps: # Assegno la variabile nello stage "A", nel job "JA" - script: echo "##vso[task.setvariable variable=myVariableInJA;isOutput=true]MyVariableValue" name: SetVariableScript - stage: B dependsOn: A jobs: - job: JB variables: # Effettuo il mapping su una variabile specifica dello stage "B" varFromStageA: $[ stageDependencies.A.JA.outputs['SetVariableScript.myVariableInJA'] ] steps: # Leggo e stampo la variabile all'interno di uno script dello stage "B" - script: echo $(varFromStageA)
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Dark mode e selezione dei temi in un'applicazione Xamarin Forms
Impostare l'auto-complete delle pull request in Azure DevOps
Restituire il correlation ID in caso di errore in ASP.NET Core Web API
Rinominare tabelle e colonne durante il reverse engineering con EF Core Power Tools
Taggare automaticamente un team member in work item tramite Azure DevOps
Hidden gems in Azure SQL that will make every developer want to use it!
Effettuare il multibinding in un'applicazione Xamarin Forms
Esecuzione condizionale dei task nelle pipeline YAML di Azure DevOps
Sviluppare codice nativo per Windows e Linux con .NET Core
Ridurre il codice per gestire gli eventi dei controlled component in una form con React
Selezione e configurazione degli agent nelle pipeline di Azure DevOps
Riconoscimento dei contenuti delle immagini con Azure Logic Apps e Content Moderator
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Creare un record in C#
- Winget: un nuovo package manager per Windows
- il 18/02 c'è il #container & #devops day! https://aspit.co/ContainerDevOpsDay-21 Le iscrizioni sono sempre aperte e la Call For Paper è attiva fino al 28/01! #aspilive #cfp
- Utilizzare il CSS Grid Model per creare il layout di un sito
- Attesa e validazione manuale nelle pipeline YAML di Azure DevOps
- Montare una file share con Azure Container Instance