Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Le variabili offrono un modo pratico per includere i dati chiave in varie parti della pipeline. L'uso più comune delle variabili consiste nel definire un valore che è possibile usare in tutta la pipeline. Tutte le variabili sono stringhe e sono modificabili. Il valore di una variabile può cambiare da un'esecuzione all'altra o da un processo all'altro nella pipeline.
Quando si definisce la stessa variabile in più posizioni con lo stesso nome, la variabile con ambito locale ha la precedenza. Una variabile definita a livello di processo può quindi eseguire l'override di una variabile impostata a livello di fase. Una variabile definita a livello di fase esegue l'override di una variabile impostata a livello radice della pipeline. Una variabile impostata nel livello radice della pipeline esegue l'override di una variabile impostata nell'interfaccia utente delle impostazioni della pipeline. Per altre informazioni su come usare le variabili definite nel processo, nella fase e nel livello radice, vedere Ambito delle variabili.
È possibile usare le variabili con expressions per assegnare valori in modo condizionale e personalizzare ulteriormente pipelines.
Le variabili differiscono dai parametri di runtime. I parametri di runtime sono tipizzati e disponibili durante l'analisi del modello.
Variabili definite dall'utente
Quando si definisce una variabile, usare sintassi diverse (macro, espressione modello o runtime). La sintassi che scegli determina dove nella pipeline viene resa la tua variabile.
Nelle pipeline YAML, impostare le variabili a livello di radice, di stadio e di job. È anche possibile specificare variabili all'esterno di una pipeline YAML nell'interfaccia utente. Quando si imposta una variabile nell'interfaccia utente, è possibile crittografare la variabile e impostarla come segreto.
Le variabili definite dall'utente possono essere impostate come di sola lettura.
Esistono restrizioni di denominazione per le variabili( ad esempio: non è possibile usare secret all'inizio di un nome di variabile).
È possibile usare un gruppo di variabili per rendere disponibili le variabili in più pipelines.
Per definire le variabili in un file da usare in più pipelines, usare template.
Variabili multilinea definite dall'utente
Azure DevOps supporta variabili multilinea, ma esistono alcune limitazioni.
I componenti downstream, ad esempio le attività della pipeline, potrebbero non gestire correttamente i valori delle variabili.
Azure DevOps non modifica i valori delle variabili definite dall'utente. È necessario formattare correttamente i valori delle variabili prima di passarli come variabili a più righe. Quando si formatta la variabile, evitare caratteri speciali, non usare nomi limitati e assicurarsi di usare un formato di fine riga che funzioni per il sistema operativo dell'agente.
Le variabili a più righe si comportano in modo diverso a seconda del sistema operativo. Per evitare questo problema, assicurarsi di formattare correttamente le variabili multilinea per il sistema operativo di destinazione.
Azure DevOps non modifica mai i valori delle variabili, anche se si fornisce una formattazione non supportata.
Variabili di sistema
Oltre alle variabili definite dall'utente, Azure Pipelines include variabili di sistema con valori predefiniti. Ad esempio, la variabile predefinita Build.BuildId fornisce l'ID di ogni compilazione e può essere usata per identificare esecuzioni di pipeline diverse. È possibile usare la Build.BuildId variabile negli script o nelle attività quando è necessario un valore univoco.
Se si usano pipelines di compilazione YAML o classica, vedere predefined variables per un elenco completo delle variabili di sistema.
Se si usano le pipeline di versione classica, vedere le variabili di rilascio release variables.
Quando viene eseguita la pipeline, le variabili di sistema assumono il loro valore corrente. Alcune variabili vengono impostate automaticamente. L'autore o l'utente finale della pipeline può modificare il valore di una variabile di sistema prima dell'esecuzione della pipeline.
Le variabili di sistema sono di sola lettura.
Variabili di ambiente
Le variabili di ambiente sono specifiche del sistema operativo in uso. È possibile inserirli in una pipeline in modi specifici della piattaforma. Il formato corrisponde alla formattazione delle variabili di ambiente per la piattaforma di scripting specifica.
Nei sistemi UNIX (macOS e Linux), le variabili di ambiente hanno il formato $NAME. In Windows il formato è %NAME% per batch e $env:NAME in PowerShell.
Anche le variabili definite dal sistema e dall'utente (ad eccezione delle variabili segrete) vengono inserite come variabili di ambiente per la piattaforma. Quando le variabili vengono convertite in variabili di ambiente, i nomi delle variabili diventano maiuscoli e i punti diventano caratteri di sottolineatura. Ad esempio, il nome any.variable della variabile diventa il nome $ANY_VARIABLEdella variabile .
Esistono restrizioni di denominazione delle variabili per le variabili di ambiente( ad esempio: non è possibile usare secret all'inizio di un nome di variabile).
Restrizioni sui nomi delle variabili
Le variabili di ambiente e definite dall'utente possono essere costituite da lettere, numeri, .e _ caratteri. Non usare prefissi di variabile riservati dal sistema. Questi prefissi sono: endpoint, inputsecret, , pathe securefile. Qualsiasi variabile che inizia con una di queste stringhe (indipendentemente dalla maiuscola) non sarà disponibile per le attività e gli script. Non usare spazi nelle variabili. Per altri vincoli, vedere Azure Pipelines restrizioni sui nomi.
Informazioni sulla sintassi delle variabili
Azure Pipelines supporta tre modi diversi per fare riferimento a variabili: macro, espressione modello ed espressione di runtime. È possibile usare ogni sintassi per uno scopo diverso e ognuna presenta alcune limitazioni.
In una pipeline, le variabili di espressione modello (${{ variables.var }}) vengono elaborate in fase di compilazione prima dell'avvio del runtime. Le variabili di sintassi macro ($(var)) vengono elaborate durante il runtime prima dell'esecuzione di un'attività. Le espressioni di runtime ($[variables.var]) vengono elaborate anche durante il runtime, ma devono essere usate con condizioni ed espressioni. Quando si usa un'espressione di runtime, questa deve assumere l'intero lato destro di una definizione.
In questo esempio è possibile notare che l'espressione modello ha ancora il valore iniziale della variabile dopo l'aggiornamento della variabile. Il valore della variabile di sintassi della macro viene aggiornato. Il valore dell'espressione modello non cambia perché la pipeline elabora tutte le variabili di espressione modello in fase di compilazione prima dell'esecuzione delle attività. Al contrario, le variabili di sintassi delle macro valutano prima dell'esecuzione di ogni attività.
variables:
- name: one
value: initialValue
steps:
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one)
displayName: First variable pass
- bash: echo "##vso[task.setvariable variable=one]secondValue"
displayName: Set new variable value
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one) # outputs secondValue
displayName: Second variable pass
Variabili di sintassi macro
La maggior parte degli esempi di documentazione usa la sintassi macro ($(var)). Usare la sintassi della macro per interpolare i valori delle variabili negli input dell'attività e in altre variabili.
Il sistema elabora le variabili con la sintassi della macro prima dell'esecuzione di un'attività durante il runtime. Il runtime avviene dopo l'espansione del modello. Quando il sistema rileva un'espressione macro, sostituisce l'espressione con il contenuto della variabile. Se non esiste alcuna variabile con tale nome, l'espressione macro non cambia. Ad esempio, se $(var) non può essere sostituito, rimane come $(var).
Le variabili di sintassi delle macro rimangono invariate quando non hanno alcun valore perché un valore vuoto come $() potrebbe significare qualcosa per l'attività in esecuzione e l'agente non deve presupporre che si voglia sostituire tale valore. Ad esempio, se si usa $(foo) per fare riferimento a una variabile foo in un'attività Bash, la sostituzione di tutte le $() espressioni nell'input nell'attività potrebbe interrompere gli script Bash.
Le variabili di macro si espandono solo quando vengono usate per un valore, non come parola chiave. I valori vengono visualizzati sul lato destro di una definizione di pipeline. Di seguito è riportato un valore valido: key: $(value). Il codice seguente non è valido: $(key): value. Le variabili di macro non vengono espanse quando vengono usate per visualizzare in linea un nome del lavoro. È invece necessario utilizzare la displayName proprietà .
Nota
Il sistema espande solo le variabili di sintassi delle macro per gli input delle attività all'interno di stages, jobse steps.
Non le espande nelle parole chiave della pipeline che vengono risolte in fase di compilazione, ad esempio resources, trigger o il valore di riferimento del repository dello step checkout (ad esempio, checkout: git://MyProject/MyRepo@$(var) non funziona).
Per parametrizzare questi valori, usare espressioni di template (${{ }}) o parametri di runtime invece.
In questo esempio viene usata la sintassi delle macro con Bash, PowerShell e un'attività script. La sintassi per chiamare una variabile utilizzando la sintassi macro è la stessa per tutte e tre.
variables:
- name: projectName
value: contoso
steps:
- bash: echo $(projectName)
- powershell: echo $(projectName)
- script: echo $(projectName)
Sintassi dell'espressione del template
Usare la sintassi dell'espressione modello per espandere sia i parametri del modello che le variabili (${{ variables.var }}). Il sistema elabora le variabili modello in fase di compilazione e le sostituisce prima dell'avvio del runtime. Usare le espressioni modello per riutilizzare parti di YAML come modelli.
Le variabili di modello si unisseguono automaticamente a stringhe vuote quando non viene trovato un valore di sostituzione. Le espressioni modello, a differenza delle espressioni macro e di runtime, possono essere visualizzate come chiavi (lato sinistro) o valori (lato destro). Di seguito è riportato un valore valido: ${{ variables.key }} : ${{ variables.value }}.
Sintassi delle espressioni di runtime
Usare la sintassi delle espressioni di runtime per le variabili che si espandono in fase di esecuzione ($[variables.var]). Le variabili di espressione di runtime si unisseguono automaticamente a stringhe vuote quando non viene trovato un valore di sostituzione. Usare espressioni di runtime in condizioni di processo per supportare l'esecuzione condizionale di processi o intere fasi.
Le variabili di espressione di runtime si espandono solo quando vengono usate per un valore, non come parola chiave. I valori vengono visualizzati sul lato destro di una definizione di pipeline. Di seguito è riportato un valore valido: key: $[variables.value]. Il codice seguente non è valido: $[variables.key]: value. L'espressione di runtime deve occupare l'intero lato destro di una coppia chiave-valore. Ad esempio, key: $[variables.value] è valido ma key: $[variables.value] foo non lo è.
| Sintassi | Esempio | Quando viene elaborato? | Dove si espande all'interno di una definizione di pipeline? | Come viene eseguito il rendering quando non viene trovato? |
|---|---|---|---|---|
| macro | $(var) |
tempo di esecuzione prima che un'attività venga eseguita | valore (lato destro) | Stampa $(var) |
| espressione modello | ${{ variables.var }} |
tempo di compilazione | chiave o valore (lato sinistro o lato destro) | stringa vuota |
| espressione di tempo di esecuzione | $[variables.var] |
runtime | valore (lato destro) | stringa vuota |
Quale sintassi è consigliabile usare?
Usare la sintassi della macro se si specifica una stringa sicura o una variabile predefinita come input per un'attività.
Scegliere un'espressione in fase di esecuzione se si utilizzano condizioni e [espressioni](expressions.md). Tuttavia, non usare un'espressione di runtime se non si vuole che la variabile vuota venga stampata (ad esempio: $[variables.var]). Ad esempio, se si dispone di logica condizionale che si basa su una variabile con un valore specifico o nessun valore, usare un'espressione macro.
In genere, una variabile di modello è lo standard da usare. Sfruttando le variabili del modello, la pipeline inserisce completamente il valore della variabile nella pipeline durante la compilazione della pipeline. Questa iniezione è utile quando si tenta di eseguire il debug delle pipeline. È possibile scaricare i file di log e valutare il valore completamente espanso in cui viene sostituito. Poiché la variabile viene inserita, non utilizzare la sintassi dei template per i valori sensibili.
Usare l'intelligenza artificiale per identificare i problemi di sintassi delle variabili
Questo esempio chiede a Copilot Chat di identificare i tipi di variabili usati in una pipeline e quando le variabili vengono risolte. Evidenzia il codice YAML e poi immetti il seguente prompt di Chat Copilot.
What types of Azure DevOps variables are used in this YAML pipeline? Give specific examples.
When does each variable process in the pipeline?
How will each variable render when not found?
What stages and jobs will the variables be available for?
Personalizzare il prompt per aggiungere specifiche in base alle esigenze.
Copilot è alimentato dall'IA, quindi sono possibili sorprese ed errori. Per altre informazioni, vedere Copilot domande frequenti.
Impostare le variabili nella pipeline
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Nel caso più comune, impostare le variabili e usarle all'interno del file YAML. Questo approccio consente di tenere traccia delle modifiche apportate alla variabile nel sistema di controllo della versione. È anche possibile definire le variabili nell'interfaccia utente delle impostazioni della pipeline (vedere la scheda Classica) e farvi riferimento in YAML.
Nell'esempio seguente viene illustrato come impostare due variabili configuration e platforme usarle più avanti nei passaggi. Per usare una variabile all'interno di un'istruzione YAML, racchiuderla in $(). Non è possibile usare le variabili per definire un oggetto repository in un'istruzione YAML.
# Set variables once
variables:
configuration: debug
platform: x64
steps:
# Use them once
- task: MSBuild@1
inputs:
solution: solution1.sln
configuration: $(configuration) # Use the variable
platform: $(platform)
# Use them again
- task: MSBuild@1
inputs:
solution: solution2.sln
configuration: $(configuration) # Use the variable
platform: $(platform)
Ambiti delle variabili
Nel file YAML impostare una variabile in vari ambiti:
- A livello di root, per renderlo disponibile per tutti i lavori nella pipeline.
- A livello di stadio, per renderlo disponibile solo per uno stadio specifico.
- A livello di lavoro, per renderlo disponibile solo per un lavoro specifico.
Quando si definisce una variabile all'inizio di un YAML, la variabile è disponibile per tutti i processi e le fasi della pipeline ed è una variabile globale. Le variabili globali definite in un YAML non sono visibili nell'interfaccia utente delle impostazioni della pipeline.
Le variabili a livello di job sostituiscono le variabili a livello radice e di fase di lavorazione. Le variabili a livello di fase eseguono l'override delle variabili a livello radice.
variables:
global_variable: value # this is available to all jobs
jobs:
- job: job1
pool:
vmImage: 'ubuntu-latest'
variables:
job_variable1: value1 # this is only available in job1
steps:
- bash: echo $(global_variable)
- bash: echo $(job_variable1)
- bash: echo $JOB_VARIABLE1 # variables are available in the script environment too
- job: job2
pool:
vmImage: 'ubuntu-latest'
variables:
job_variable2: value2 # this is only available in job2
steps:
- bash: echo $(global_variable)
- bash: echo $(job_variable2)
- bash: echo $GLOBAL_VARIABLE
L'output di entrambi i processi ha il seguente aspetto:
# job1
value
value1
value1
# job2
value
value2
value
Specificare le variabili
Negli esempi precedenti la variables parola chiave è seguita da un elenco di coppie chiave-valore.
Le chiavi sono i nomi delle variabili e i valori sono i valori delle variabili.
Un'altra sintassi è utile quando si vogliono usare modelli per variabili o gruppi di variabili.
Usando i modelli, è possibile definire le variabili in un file YAML e includerle in un altro file YAML.
I gruppi di variabili sono un set di variabili che è possibile usare in più pipelines. Usando i gruppi di variabili, è possibile gestire e organizzare variabili comuni a varie fasi in un'unica posizione.
Usare questa sintassi per i modelli di variabili e i gruppi di variabili a livello radice di una pipeline.
In questa sintassi alternativa, la variables parola chiave accetta un elenco di identificatori di variabile.
Gli identificatori di variabile sono name per una variabile regolare, group per un gruppo di variabili e template per includere un modello di variabile.
Nell'esempio seguente vengono illustrati tutti e tre.
variables:
# a regular variable
- name: myvariable
value: myvalue
# a variable group
- group: myvariablegroup
# a reference to a variable template
- template: myvariabletemplate.yml
Per altre informazioni, vedere Riutilizzo delle variabili con i modelli.
Accedi alle variabili tramite l'ambiente
Si noti che le variabili vengono rese disponibili anche agli script tramite variabili di ambiente. La sintassi per l'uso di queste variabili di ambiente dipende dal linguaggio di scripting.
Il nome è maiuscolo e . viene sostituito con _. Questa operazione viene inserita automaticamente nell'ambiente di processo. Di seguito sono riportati alcuni esempi.
- Script batch:
%VARIABLE_NAME% - Script di PowerShell:
$env:VARIABLE_NAME - Script Bash:
$VARIABLE_NAME
Importante
Le variabili predefinite che contengono percorsi di file vengono convertite nello stile appropriato (stile Windows C:\foo\ rispetto allo stile Unix /foo/) in base al tipo di host e al tipo di shell dell'agente. Se si eseguono attività di script bash in Windows, è consigliabile usare il metodo della variabile di ambiente per accedere a queste variabili anziché al metodo della variabile della pipeline per assicurarsi di avere lo stile corretto del percorso del file.
Impostare le variabili segrete
Suggerimento
Le variabili segrete non vengono esportate automaticamente come variabili di ambiente. Per usare le variabili segrete negli script, eseguirne il mapping esplicito alle variabili di ambiente. Per altre informazioni, vedere Impostare le variabili segrete.
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Non impostare le variabili segrete nel file YAML. I sistemi operativi spesso registrano i comandi per i processi eseguiti e non si vuole che il log includa un segreto passato come input. Usare l'ambiente dello script o mappare la variabile all'interno del blocco variables per passare segreti alla pipeline.
Nota
Azure Pipelines fa un tentativo di mascherare i segreti durante l'emissione di dati nei log della pipeline, pertanto è possibile visualizzare variabili aggiuntive e dati mascherati nell'output e nei log che non sono impostati come segreti.
È necessario impostare le variabili segrete nell'interfaccia delle impostazioni della pipeline per la pipeline. Queste variabili hanno come ambito la pipeline in cui sono impostate. È anche possibile impostare le variabili segrete nei gruppi di variabili.
Per impostare i segreti nell'interfaccia Web, seguire questa procedura:
- Passare alla pagina Pipelines, selezionare la pipeline appropriata e quindi selezionare Edit.
- Individuare le Variabili per questa pipeline.
- Aggiungere o aggiornare la variabile.
- Selezionare l'opzione Mantieni questo valore segreto per archiviare la variabile in modo crittografato.
- Salvare la pipeline.
Le variabili segrete vengono crittografate quando sono inattive con una chiave RSA a 2048 bit. I segreti sono disponibili nell'agente per le attività e gli script da utilizzare. Fai attenzione a chi ha l'accesso per modificare la tua pipeline.
Importante
Ci sforziamo di mascherare i segreti dalla visualizzazione in Azure Pipelines output, ma è comunque necessario adottare precauzioni. Non visualizzare mai i dati sensibili come output. Alcuni sistemi operativi registrano gli argomenti della riga di comando. Non passare mai i segreti sulla riga di comando. È invece consigliabile eseguire il mapping dei segreti alle variabili di ambiente.
Non mascheriamo mai le sottostringhe dei segreti. Se, ad esempio, "abc123" viene impostato come segreto, "abc" non viene mascherato dai log. Lo scopo è evitare di mascherare i segreti a un livello troppo granulare, rendendo illeggibili i log. Per questo motivo, i segreti non dovrebbero contenere dati strutturati. Se, ad esempio, "{ "foo": "bar" }" è impostato come segreto, "bar" non viene mascherato nei log.
A differenza di una variabile normale, non vengono decrittografati automaticamente nelle variabili di ambiente per gli script. È necessario eseguire il mapping esplicito delle variabili segrete.
L'esempio seguente illustra come eseguire il mapping e usare una variabile segreta denominata mySecret negli script di PowerShell e Bash. Vengono definite due variabili globali.
GLOBAL_MYSECRET viene assegnato il valore di una variabile mySecretsegreta e GLOBAL_MY_MAPPED_ENV_VAR viene assegnato il valore di una variabile nonSecretVariablenon segreta . A differenza di una variabile di pipeline normale, non esiste alcuna variabile di ambiente denominata MYSECRET.
L'attività di PowerShell esegue uno script per stampare le variabili.
-
$(mySecret): si tratta di un riferimento diretto alla variabile segreta e funziona. -
$env:MYSECRET: tenta di accedere alla variabile segreta come variabile di ambiente, che non funziona perché le variabili segrete non vengono mappate automaticamente alle variabili di ambiente. -
$env:GLOBAL_MYSECRET: tenta di access la variabile segreta tramite una variabile globale, che non funziona anche perché le variabili segrete non possono essere mappate in questo modo. -
$env:GLOBAL_MY_MAPPED_ENV_VAR: accede alla variabile non segreta tramite una variabile globale, che funziona. -
$env:MY_MAPPED_ENV_VAR: accede alla variabile segreta tramite una variabile di ambiente specifica dell'attività, che è il modo consigliato per eseguire il mapping delle variabili segrete alle variabili di ambiente.
variables:
GLOBAL_MYSECRET: $(mySecret) # this will not work because the secret variable needs to be mapped as env
GLOBAL_MY_MAPPED_ENV_VAR: $(nonSecretVariable) # this works because it's not a secret.
steps:
- powershell: |
Write-Host "Using an input-macro works: $(mySecret)"
Write-Host "Using the env var directly does not work: $env:MYSECRET"
Write-Host "Using a global secret var mapped in the pipeline does not work either: $env:GLOBAL_MYSECRET"
Write-Host "Using a global non-secret var mapped in the pipeline works: $env:GLOBAL_MY_MAPPED_ENV_VAR"
Write-Host "Using the mapped env var for this task works and is recommended: $env:MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable
- bash: |
echo "Using an input-macro works: $(mySecret)"
echo "Using the env var directly does not work: $MYSECRET"
echo "Using a global secret var mapped in the pipeline does not work either: $GLOBAL_MYSECRET"
echo "Using a global non-secret var mapped in the pipeline works: $GLOBAL_MY_MAPPED_ENV_VAR"
echo "Using the mapped env var for this task works and is recommended: $MY_MAPPED_ENV_VAR"
env:
MY_MAPPED_ENV_VAR: $(mySecret) # the recommended way to map to an env variable
L'output di entrambe le attività nello script precedente è simile al seguente:
Using an input-macro works: ***
Using the env var directly does not work:
Using a global secret var mapped in the pipeline does not work either:
Using a global non-secret var mapped in the pipeline works: foo
Using the mapped env var for this task works and is recommended: ***
È anche possibile usare variabili segrete al di fuori degli script. Ad esempio, è possibile eseguire il mapping delle variabili segrete alle attività usando la variables definizione . Questo esempio illustra come usare le variabili segrete $(vmsUser) e $(vmsAdminPass) in un'attività di copia di file Azure.
variables:
VMS_USER: $(vmsUser)
VMS_PASS: $(vmsAdminPass)
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureFileCopy@6
inputs:
SourcePath: 'my/path' # Specify the source path
azureSubscription: 'my-subscription' # Azure subscription name
Destination: 'AzureVMs' # Destination type
storage: 'my-storage' # Azure storage account name
resourceGroup: 'my-resource-group' # Resource group name
vmsAdminUserName: $(VMS_USER) # Admin username for the VM
vmsAdminPassword: $(VMS_PASS) # Admin password for the VM
CleanTargetBeforeCopy: false # Do not clean the target before copying
Fare riferimento alle variabili segrete nei gruppi di variabili
Questo esempio illustra come fare riferimento a un gruppo di variabili nel file YAML e come aggiungere variabili all'interno di YAML. Nell'esempio vengono usate due variabili del gruppo di variabili: user e token. La token variabile è segreta ed è mappata alla variabile $env:MY_MAPPED_TOKEN di ambiente in modo che sia possibile farvi riferimento in YAML.
Questo YAML esegue una chiamata REST per recuperare un elenco di versioni e restituisce il risultato.
variables:
- group: 'my-var-group' # variable group
- name: 'devopsAccount' # new variable defined in YAML
value: 'contoso'
- name: 'projectName' # new variable defined in YAML
value: 'contosoads'
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
# Encode the Personal Access Token (PAT)
# $env:USER is a normal variable in the variable group
# $env:MY_MAPPED_TOKEN is a mapped secret variable
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $env:USER,$env:MY_MAPPED_TOKEN)))
# Get a list of releases
$uri = "https://vsrm.dev.azure.com/$(devopsAccount)/$(projectName)/_apis/release/releases?api-version=5.1"
# Invoke the REST call
$result = Invoke-RestMethod -Uri $uri -Method Get -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
# Output releases in JSON
Write-Host $result.value
env:
MY_MAPPED_TOKEN: $(token) # Maps the secret variable $(token) from my-var-group
Importante
Per impostazione predefinita, con i repository GitHub, le build delle richieste pull dei fork non possono accedere alle variabili segrete associate alla pipeline. Per altre informazioni, vedere Contributions from forks.
Condividere variabili tra pipelines
Per condividere le variabili tra più pipelines nel project, usare l'interfaccia Web. In Libreria usare gruppi di variabili.
Utilizzare le variabili di output dalle attività
Alcune attività definiscono le variabili di output, che è possibile usare nei passaggi downstream, nei processi e nelle fasi. In YAML è possibile accedere alle variabili tra job e stage usando dependencies.
Quando si fa riferimento a processi matrice nelle attività downstream, usare una sintassi diversa. Consulta Impostare una variabile di output multi-processo. È anche necessario usare una sintassi diversa per le variabili nei processi di distribuzione. Vedere Supporto per le variabili di output nei processi di distribuzione.
- Per fare riferimento a una variabile da un'attività diversa all'interno dello stesso processo, usare
TASK.VARIABLE. - Per fare riferimento a una variabile da un'operazione di un lavoro diverso, usare
dependencies.JOB.outputs['TASK.VARIABLE'].
Nota
Per impostazione predefinita, ogni fase di una pipeline dipende da quella appena precedente nel file YAML. Se è necessario fare riferimento a una fase che non è immediatamente precedente a quella corrente, è possibile eseguire l'override di questa impostazione predefinita automatica aggiungendo una dependsOn sezione alla fase.
Nota
Negli esempi seguenti viene usata la sintassi della pipeline standard. Se si utilizzano le pipeline di distribuzione, la sintassi delle variabili e quella delle variabili condizionali sarà diversa. Per informazioni sulla sintassi specifica da usare, vedere Processi di distribuzione.
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Per questi esempi, si supponga di avere un'attività denominata MyTask, che imposta una variabile di output denominata MyVar.
Altre informazioni sulla sintassi in Espressioni - Dipendenze.
Usare gli output nello stesso processo
steps:
- task: MyTask@1 # this step generates the output variable
name: ProduceVar # because we're going to depend on it, we need to name the step
- script: echo $(ProduceVar.MyVar) # this step uses the output variable
Usare gli output in un'attività diversa
jobs:
- job: A
steps:
# assume that MyTask generates an output variable called "MyVar"
# (you would learn that from the task's documentation)
- task: MyTask@1
name: ProduceVar # because we're going to depend on it, we need to name the step
- job: B
dependsOn: A
variables:
# map the output variable from A into this job
varFromA: $[ dependencies.A.outputs['ProduceVar.MyVar'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
Usare gli output in un passaggio diverso
Per usare l'output da una fase diversa, usare il formato stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE'] per fare riferimento alle variabili. A livello di fase, ma non a livello di lavoro, è possibile usare queste variabili nelle condizioni.
Le variabili di output sono disponibili solo nella fase downstream successiva. Se più fasi utilizzano la stessa variabile di output, usare la dependsOn condizione .
stages:
- stage: One
jobs:
- job: A
steps:
- task: MyTask@1 # this step generates the output variable
name: ProduceVar # because we're going to depend on it, we need to name the step
- stage: Two
dependsOn:
- One
jobs:
- job: B
variables:
# map the output variable from A into this job
varFromA: $[ stageDependencies.One.A.outputs['ProduceVar.MyVar'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
- stage: Three
dependsOn:
- One
- Two
jobs:
- job: C
variables:
# map the output variable from A into this job
varFromA: $[ stageDependencies.One.A.outputs['ProduceVar.MyVar'] ]
steps:
- script: echo $(varFromA) # this step uses the mapped-in variable
È anche possibile passare variabili tra le fasi usando un input di file. Per farlo, è necessario definire le variabili nella seconda fase a livello di job e quindi passare le variabili come input env:.
## script-a.sh
echo "##vso[task.setvariable variable=sauce;isOutput=true]crushed tomatoes"
## script-b.sh
echo 'Hello file version'
echo $skipMe
echo $StageSauce
## azure-pipelines.yml
stages:
- stage: one
jobs:
- job: A
steps:
- task: Bash@3
inputs:
filePath: 'script-a.sh'
name: setvar
- bash: |
echo "##vso[task.setvariable variable=skipsubsequent;isOutput=true]true"
name: skipstep
- stage: two
jobs:
- job: B
variables:
- name: StageSauce
value: $[ stageDependencies.one.A.outputs['setvar.sauce'] ]
- name: skipMe
value: $[ stageDependencies.one.A.outputs['skipstep.skipsubsequent'] ]
steps:
- task: Bash@3
inputs:
filePath: 'script-b.sh'
name: fileversion
env:
StageSauce: $(StageSauce) # predefined in variables section
skipMe: $(skipMe) # predefined in variables section
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo 'Hello inline version'
echo $(skipMe)
echo $(StageSauce)
L'output delle fasi della pipeline precedente è simile al seguente:
Hello inline version
true
crushed tomatoes
Elencare le variabili
Elencare tutte le variabili nella pipeline usando il comando az pipelines variable list. Per iniziare, vedere Introduzione alla CLI di Azure DevOps.
az pipelines variable list [--org]
[--pipeline-id]
[--pipeline-name]
[--project]
Parametri
-
org: URL dell'organizzazione Azure DevOps. Configurare l'organizzazione predefinita usando
az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o prelevato tramitegit config. Esempio:--org https://dev.azure.com/MyOrganizationName/. - pipeline-id: obbligatorio se pipeline-name non viene specificato. ID della pipeline.
- pipeline-name: obbligatorio se pipeline-id non viene fornito, ma ignorato se viene specificato pipeline-id . Nome della pipeline.
-
project: nome o ID del project. Configurare il project predefinito usando
az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o prelevato tramitegit config.
Esempio
Il comando seguente elenca tutte le variabili nella pipeline con ID 12 e mostra il risultato in formato tabella.
az pipelines variable list --pipeline-id 12 --output table
Name Allow Override Is Secret Value
------------- ---------------- ----------- ------------
MyVariable False False platform
NextVariable False True platform
Configuration False False config.debug
Impostare variabili negli script
Gli script possono definire variabili che i passaggi successivi della pipeline utilizzano. Tutte le variabili impostate da questo metodo vengono considerate come stringhe. Per impostare una variabile da uno script, usare una sintassi di comando e stampare su stdout.
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Impostare una variabile con ambito di attività tramite uno script
Per impostare una variabile da uno script, usare il task.setvariablecomando di registrazione. Questo comando aggiorna le variabili di ambiente per i processi successivi. Le attività successive possono accedere alla nuova variabile usando la sintassi macro e all'interno delle attività come variabili di ambiente.
Quando si imposta su issecret true, il valore della variabile viene salvato come segreto e mascherato dal log. Per altre informazioni sulle variabili segrete, vedere Comandi di registrazione.
steps:
# Create a variable
- bash: |
echo "##vso[task.setvariable variable=sauce]crushed tomatoes" # remember to use double quotes
# Use the variable
# "$(sauce)" is replaced by the contents of the `sauce` variable by Azure Pipelines
# before handing the body of the script to the shell.
- bash: |
echo my pipeline variable is $(sauce)
I passaggi successivi aggiungono la variabile della pipeline al loro ambiente. Non è possibile usare la variabile nel passaggio definito.
steps:
# Create a variable
# Note that this does not update the environment of the current script.
- bash: |
echo "##vso[task.setvariable variable=sauce]crushed tomatoes"
# An environment variable called `SAUCE` has been added to all downstream steps
- bash: |
echo "my environment variable is $SAUCE"
- pwsh: |
Write-Host "my environment variable is $env:SAUCE"
Output della pipeline precedente.
my environment variable is crushed tomatoes
my environment variable is crushed tomatoes
Impostare una variabile di output multi-lavoro
Se si vuole rendere disponibile una variabile per i processi futuri, è necessario contrassegnarla come variabile di output usando isOutput=true. È quindi possibile eseguirne il mapping in processi futuri usando la $[] sintassi e includendo il nome del passaggio che imposta la variabile. Le variabili di output multi-job funzionano solo per i job nella stessa fase.
Per trasmettere variabili ai processi in fasi diverse, usare la sintassi delle dipendenze di fase
Nota
Per impostazione predefinita, ogni fase di una pipeline dipende da quella appena precedente nel file YAML. Di conseguenza, ogni fase può usare le variabili di output della fase precedente. Per access altre fasi, è necessario modificare il grafico delle dipendenze, ad esempio, se la fase 3 richiede una variabile dalla fase 1, sarà necessario dichiarare una dipendenza esplicita nella fase 1.
Quando si crea una variabile di output multi-attività, è necessario assegnare l'espressione a una variabile. In questo YAML, $[ dependencies.A.outputs['setvarStep.myOutputVar'] ] viene assegnato alla variabile $(myVarFromJobA).
jobs:
# Set an output variable from job A
- job: A
pool:
vmImage: 'windows-latest'
steps:
- powershell: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable into job B
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-latest'
variables:
myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ] # map in the variable
# remember, expressions require single quotes
steps:
- script: echo $(myVarFromJobA)
name: echovar
Output della pipeline precedente.
this is the value
this is the value
Se si imposta una variabile da una fase a un'altra, usare stageDependencies.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageOutputVar;isOutput=true]this is a stage output var"
name: printvar
- stage: B
dependsOn: A
variables:
myVarfromStageA: $[ stageDependencies.A.A1.outputs['printvar.myStageOutputVar'] ]
jobs:
- job: B1
steps:
- script: echo $(myVarfromStageA)
Se imposti una variabile da un matrix o slice, è necessario fare riferimento alla variabile quando la si accede in un lavoro a valle, includendo:
- Il nome del lavoro.
- Il passo.
jobs:
# Set an output variable from a job with a matrix
- job: A
pool:
vmImage: 'ubuntu-latest'
strategy:
maxParallel: 2
matrix:
debugJob:
configuration: debug
platform: x64
releaseJob:
configuration: release
platform: x64
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the $(configuration) value"
name: setvarStep
- bash: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the debug job
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-latest'
variables:
myVarFromJobADebug: $[ dependencies.A.outputs['debugJob.setvarStep.myOutputVar'] ]
steps:
- script: echo $(myVarFromJobADebug)
name: echovar
jobs:
# Set an output variable from a job with slicing
- job: A
pool:
vmImage: 'ubuntu-latest'
parallel: 2 # Two slices
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the slice $(system.jobPositionInPhase) value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the job for the first slice
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-latest'
variables:
myVarFromJobsA1: $[ dependencies.A.outputs['job1.setvarStep.myOutputVar'] ]
steps:
- script: "echo $(myVarFromJobsA1)"
name: echovar
Assicurarsi di anteporre il nome del processo alle variabili di output di un processo di distribuzione . In questo caso, il nome del processo è A:
jobs:
# Set an output variable from a deployment
- deployment: A
pool:
vmImage: 'ubuntu-latest'
environment: staging
strategy:
runOnce:
deploy:
steps:
- bash: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
name: setvarStep
- bash: echo $(setvarStep.myOutputVar)
name: echovar
# Map the variable from the job for the first slice
- job: B
dependsOn: A
pool:
vmImage: 'ubuntu-latest'
variables:
myVarFromDeploymentJob: $[ dependencies.A.outputs['A.setvarStep.myOutputVar'] ]
steps:
- bash: "echo $(myVarFromDeploymentJob)"
name: echovar
Impostare le variabili usando espressioni
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
È possibile impostare una variabile usando un'espressione. Si è già riscontrato un caso di questo approccio quando si imposta una variabile sull'output di un'altra variabile da un processo precedente.
- job: B
dependsOn: A
variables:
myVarFromJobsA1: $[ dependencies.A.outputs['job1.setvarStep.myOutputVar'] ] # remember to use single quotes
È possibile usare una qualsiasi delle espressioni supportate per impostare una variabile. Di seguito è riportato un esempio di impostazione di una variabile da usare come contatore che inizia da 100, viene incrementato di 1 per ogni esecuzione e viene reimpostato su 100 ogni giorno.
jobs:
- job:
variables:
a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
steps:
- bash: echo $(a)
Per altre informazioni su contatori, dipendenze e altre espressioni, vedere espressioni.
Configurare le variabili impostabili per i passaggi
È possibile definire settableVariables all'interno di un passaggio o specificare che non è possibile impostare variabili.
In questo esempio lo script non può impostare una variabile.
steps:
- script: echo This is a step
target:
settableVariables: none
Nell'esempio seguente lo script può impostare la variabile sauce ma non può impostare la variabile secretSauce. Nella pagina di esecuzione della pipeline viene visualizzato un avviso.
steps:
- bash: |
echo "##vso[task.setvariable variable=Sauce;]crushed tomatoes"
echo "##vso[task.setvariable variable=secretSauce;]crushed tomatoes with garlic"
target:
settableVariables:
- sauce
name: SetVars
- bash:
echo "Sauce is $(sauce)"
echo "secretSauce is $(secretSauce)"
name: OutputVars
Consentire al momento della messa in coda
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Se una variabile viene visualizzata nel variables blocco di un file YAML, il relativo valore è fisso e gli utenti non possono eseguirne l'override in fase di coda. Definire le variabili in un file YAML, ma in alcuni casi questo approccio non ha senso. Ad esempio, è possibile definire una variabile privata e non esporla nel file YAML. In alternativa, potrebbe essere necessario impostare manualmente un valore di variabile durante l'esecuzione della pipeline.
Esistono due opzioni per definire i valori di tempo della coda. È possibile definire una variabile nell'interfaccia utente e selezionare l'opzione Consenti agli utenti di sovrascrivere questo valore durante l'esecuzione di questa pipeline oppure usare parametri di runtime. Se la tua variabile non è un segreto, è consigliabile usare parametri runtime.
Per impostare una variabile in fase di coda, aggiungere una nuova variabile all'interno della pipeline e selezionare l'opzione di override. Solo gli utenti con l'autorizzazione Modifica configurazione della coda di compilazione possono cambiare il valore di una variabile.
Per consentire l'impostazione di una variabile in fase di coda, assicurarsi che la variabile non venga visualizzata anche nel variables blocco di una pipeline o di un processo. Se si definisce una variabile sia nel blocco di variabili di un YAML che nell'interfaccia utente, il valore in YAML ha priorità.
Per maggiore sicurezza, usare un set predefinito di valori per variabili settable in fase di coda e tipi sicuri, ad esempio valori booleani e numeri interi. Per le stringhe, usare un set predefinito di valori.
Espansione delle variabili
- YAML
- Classico
- interfaccia della riga di comando Azure DevOps
Quando si imposta una variabile con lo stesso nome in più ambiti, viene applicata la precedenza seguente (precedenza più alta):
- Variabile a livello di lavoro impostata nel file YAML
- Variabile a livello di fase impostata nel file YAML
- Variabile a livello di pipeline impostata nel file YAML
- Variabile impostata nel tempo di attesa
- Variabile pipeline impostata nell'interfaccia utente delle impostazioni della pipeline
Nell'esempio seguente la stessa variabile viene impostata a a livello di pipeline e di processo nel file YAML. Viene anche impostato in un gruppo Gdi variabili e come variabile nell'interfaccia utente delle impostazioni della pipeline.
variables:
a: 'pipeline yaml'
stages:
- stage: one
displayName: one
variables:
- name: a
value: 'stage yaml'
jobs:
- job: A
variables:
- name: a
value: 'job yaml'
steps:
- bash: echo $(a) # This will be 'job yaml'
Quando si imposta una variabile con lo stesso nome nello stesso ambito, l'ultimo valore impostato ha la precedenza.
stages:
- stage: one
displayName: Stage One
variables:
- name: a
value: alpha
- name: a
value: beta
jobs:
- job: I
displayName: Job I
variables:
- name: b
value: uno
- name: b
value: dos
steps:
- script: echo $(a) #outputs beta
- script: echo $(b) #outputs dos
Nota
Quando si imposta una variabile nel file YAML, non definirla nell'editor web come impostabile in fase di coda. Attualmente non è possibile modificare le variabili impostate nel file YAML in fase di coda. Se è necessario impostare una variabile in fase di coda, non impostarla nel file YAML.
Le variabili vengono espanse una volta all'avvio dell'esecuzione e di nuovo all'inizio di ogni passaggio. Ad esempio:
jobs:
- job: A
variables:
a: 10
steps:
- bash: |
echo $(a) # This will be 10
echo '##vso[task.setvariable variable=a]20'
echo $(a) # This will also be 10, since the expansion of $(a) happens before the step
- bash: echo $(a) # This will be 20, since the variables are expanded just before the step
Nell'esempio precedente sono presenti due passaggi. L'espansione di $(a) si verifica una volta all'inizio del processo e una volta all'inizio di ognuno dei due passaggi.
Poiché le variabili vengono espanse all'inizio di un processo, non è possibile usarle in una strategia. Nell'esempio seguente non è possibile usare la variabile a per espandere la matrice del processo, perché la variabile è disponibile solo all'inizio di ogni processo espanso.
jobs:
- job: A
variables:
a: 10
strategy:
matrix:
x:
some_variable: $(a) # This does not work
Se la variabile è una variabile a di output di un processo precedente, è possibile usarla in un processo futuro.
- job: A
steps:
- powershell: echo "##vso[task.setvariable variable=a;isOutput=true]10"
name: a_step
# Map the variable into job B
- job: B
dependsOn: A
variables:
some_variable: $[ dependencies.A.outputs['a_step.a'] ]
Espansione ricorsiva
Nell'agente le variabili a cui si fa riferimento usando $( ) la sintassi vengono espanse in modo ricorsivo.
Ad esempio:
variables:
myInner: someValue
myOuter: $(myInner)
steps:
- script: echo $(myOuter) # prints "someValue"
displayName: Variable is $(myOuter) # display name is "Variable is someValue"
Impostare le variabili
Impostare le variabili
Impostare le variabili