
In Azure Pipelines, le variabili di configurazione rappresentano una funzionalità indispensabile per le proprie release: infatti, è possibile salvare dei valori che torneranno utili in fase di build o deploy per configurare gli applicativi nel rilascio.
Il meccanismo utilizzato dietro le quinte viene definito come variable substitution, ed è indicato per la configurazione di file come .config o .json. L’utilizzo di queste variabili in una definizione di una pipeline è semplice: basta infatti usare il nome associato alla variabile racchiuso dalla istruzione $(nome_variabile)
.
Quando usiamo i deployment group in Azure Pipelines per associare più nodi target ad una release, tutti i nodi riceveranno la stessa medesima configurazione presente nelle variabili.
Durante una consulenza da un nostro cliente su Azure Pipelines, è però sorta l’esigenza di dover configurare alcune variabili con valori differenti, in base al nodo target. Ci sono diversi contesti in cui una situazione del genere può tornare a verificarsi: logging, audit e configurazioni applicative avanzate. Prima di entrare nel dettaglio della soluzione, cerchiamo di capire come funzionano i deployment group e le variabili ad esso associate.
Cosa sono i deployment group in Azure Pipelines
I deployment group rappresentano un modo molto semplice in Azure Pipelines di organizzare i nodi su cui si dovrà rilasciare un applicativo. La loro configurazione è estremamente veloce e si basa sull’installazione di un agente: infatti, basterà eseguire uno script di registrazione già preimpostato in Azure Pipeline sulla macchina target (figura 1).
Una volta registrato, a seguito di una build e quando sarà pronto un nuovo artefatto da rilasciare, l’agente recupererà quest’ultimo da Azure DevOps e lo installerà sulla macchina target.

1. Installazione di un agent nei deployment group
Durante l’esecuzione dello script di registrazione saranno richieste alcune informazioni, tra cui il nome dell’agente da utilizzare per la macchina: questo valore ci servirà più avanti per identificare i le variabili da usare in fase di build o release.
Al termine dell’installazione l’agente è correttamente configurato, ed è possibile visualizzarne lo stato all’interno della pagina del deployment group come in figura 2:

2. Stato di un agente
Siamo finalmente pronti per vedere come configurare le variabili nel nostro deployment group.
Cosa sono le variabili in Azure Pipelines
Le variabili rappresentano un modo conveniente per salvare informazioni che saranno poi utilizzate in fase di build o release. Queste possono essere definite nella sezione “Library” (figura 3) di Azure DevOps, utilizzando una chiave per identificarle e possono essere di due tipi: in chiaro o segreta (usate per salvare informazioni sensibili).

3. Library in Azure DevOps
Le variabili possono inoltre essere racchiuse in un gruppo, in modo da averne una buona categorizzazione. Una volta creato il gruppo, è sufficiente aggiungere al proprio interno le variabili di cui si ha bisogno (figura 4).

4. Gruppi di variabili in Azure DevOps
Seguendo l’immagine sottostante (figura 5), i gruppi possono essere collegati ad una release nella sezione delle variabili (1) premendo su Variable groups (2) e poi Link variable group (3). Una volta selezionato il gruppo (4) di variabili da utilizzare, è anche possibile impostare lo scopo a cui le variabili devono essere associate: per release o per specifico ambiente target (5).

5. Collegare un gruppo di variabili ad una release
Come anticipato, le configurazioni presenti in questo gruppo di variabili saranno riportate fedelmente per ogni target presente nel deployment group, ma se questo non fosse il nostro caso? Scopriamo nel prossimo paragrafo come configurare determinate variabili per un singolo nodo.
Configurare una variabile per nodo
Consideriamo, ad esempio, il caso in cui devo rilasciare una web application e per una release pipeline ho 3 nodi target associati al mio deployment group. Per alcune configurazioni, vorrei che il loro valore fosse specifico del nodo target e non uguale per tutti i nodi. Come fare in questo caso? Ad oggi, purtroppo, non vi è nulla di già pronto in Azure Pipelines per poter gestire questa situazione. Ma la soluzione si rivela piuttosto banale da implementare. Ecco cosa ci occorre fare:
- Definire una variabile con una chiave che contenga il nome dell’agente presente nel deployment group;
- Creare all’interno della propria build un task di tipo Script Powershell per poter sostituire manualmente il valore presente in un file di configurazione.
Per il primo passo basterà definire così le variabili:

6. Variabili per host
Nota bene: è importante che il valore associato a Host1, Host2 e Host3 corrisponda al nome dell’agente presente nel deployment group. Ad esempio, nel caso in cui il nome dell’agente sia PRODSERVER, la mia variabile si chiamerà PRODSERVER.MyCustomVariable. Occorre inoltre fare attenzione ai nomi per gli agenti che contengono il trattino (“-“) perchè in fase di esecuzione lo script sotto potrebbe dare problemi.
Per recuperare il valore contenuto nella variabile in fase di release, basterà aggiungere uno script Powershell di tipo inline con le seguenti istruzioni:
# Stampa il valore corrente
Write-Output "$($(Agent.Name).MyCustomVariable)"
# Leggi il tuo file di configurazione e sostituisci il valore con $($(Agent.Name).MyCustomVariable)
# ...
# Salva il file con la nuova configurazione
# ...
In particolare, l’istruzione
Write-Output "$($(Agent.Name).MyCustomVariable)"
non fa altro che recuperare il nome dell’agente su cui si sta effettuando la release ed espandere il valore contenuto nella variabile PRODSERVER.MyCustomVariable. Con questo semplice script il gioco è fatto!
Buon deploy!