Variabelen instellen in scripts
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Wanneer u PowerShell- en Bash-scripts in uw pijplijnen gebruikt, is het vaak handig om variabelen in te stellen die u vervolgens in toekomstige taken kunt gebruiken. Nieuw ingestelde variabelen zijn niet beschikbaar in dezelfde taak.
Scripts zijn handig als u iets wilt doen dat niet wordt ondersteund door een taak, zoals het aanroepen van een aangepaste REST API en het parseren van het antwoord.
U gebruikt de task.setvariable
opdracht voor logboekregistratie om variabelen in te stellen in PowerShell - en Bash-scripts .
Notitie
Implementatietaken gebruiken een andere syntaxis voor uitvoervariabelen. Zie Implementatietaken voor meer informatie over ondersteuning voor uitvoervariabelen in implementatietaken.
Zie Voorwaarden opgeven als u een variabele wilt gebruiken met een voorwaarde in een pijplijn.
Over task.setvariable
Wanneer u een variabele met task.setvariable
toevoegt, kunnen de volgende taken de variabele gebruiken met behulp van macrosyntaxis $(myVar)
. De variabele is standaard alleen beschikbaar voor taken in dezelfde taak. Als u de parameter isoutput
toevoegt, wordt de syntaxis voor het aanroepen van de variabele gewijzigd. Zie Een uitvoervariabele instellen voor gebruik in dezelfde taak.
Stel de variabele myVar
in met de waarde foo
.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
De variabele myVar
lezen:
- bash: |
echo "You can use macro syntax for variables: $(myVar)"
Variabele-eigenschappen instellen
De task.setvariable
opdracht bevat eigenschappen voor het instellen van een variabele als geheim, als uitvoervariabele en als alleen-lezen. De beschikbare eigenschappen zijn onder andere:
variable
= variabelenaam (vereist)issecret
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)isoutput
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)isreadonly
= Booleaanse waarde (optioneel, standaard ingesteld op onwaar)
Als u de variabele in de volgende fase wilt gebruiken, stelt u de isoutput
eigenschap in op true
. Als u wilt verwijzen naar een variabele met de isoutput
set waar, neemt u de taaknaam op. Bijvoorbeeld: $(TaskName.myVar)
.
Wanneer u een variabele instelt als alleen-lezen, kan deze niet worden overschreven door downstreamtaken. Stel isreadonly
in op true
. Het instellen van een variabele als alleen-lezen verbetert de beveiliging door die variabele onveranderbaar te maken.
Een variabele instellen als geheim
Wanneer issecret
deze is ingesteld op true, wordt de waarde van de variabele opgeslagen als geheim en gemaskeerd uit logboeken.
Notitie
Azure Pipelines doet er alles aan om geheimen te maskeren bij het verzenden van gegevens naar pijplijnlogboeken, zodat er mogelijk extra variabelen en gegevens worden gemaskeerd in uitvoer en logboeken die niet als geheimen zijn ingesteld.
Stel de geheime variabele mySecretVal
in.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
Haal de geheime variabele mySecretVal
op.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Uitvoer van geheime variabelen in bash.
Niveaus van uitvoervariabelen
Er zijn vier verschillende typen uitvoervariabelen met verschillende syntaxis:
- Uitvoervariabelen die zijn ingesteld in dezelfde taak zonder de
isoutput
parameter. Als u naar deze variabelen wilt verwijzen, gebruikt u de macrosyntaxis. Voorbeeld:$(myVar)
. - Uitvoervariabelen die zijn ingesteld in dezelfde taak met de
isoutput
parameter. Als u naar deze variabelen wilt verwijzen, neemt u de naam van de taak op. Voorbeeld:$(myTask.myVar)
. - Uitvoervariabelen die zijn ingesteld in een toekomstige taak. Als u naar deze variabelen wilt verwijzen, verwijst u naar de variabele in de
variables
sectie metdependency
syntaxis. - Uitvoervariabelen die in toekomstige fasen zijn ingesteld. Als u naar deze variabelen wilt verwijzen, verwijst u naar de variabele in de
variables
sectie metstageDependencies
syntaxis.
Notitie
Toekomstige fasen of taken hebben alleen toegang tot uitvoervariabelen als ze afhankelijk zijn van de fase of taak waarin de variabele is ingesteld. Als u een uitvoervariabele toegankelijk wilt maken, moet u ervoor zorgen dat de volgende fase of taak afhankelijk is van de fase of taak waarin u de variabele hebt gemaakt. Als meerdere fasen of taken dezelfde uitvoervariabele moeten gebruiken, gebruikt u de dependsOn
voorwaarde om deze afhankelijkheid tot stand te brengen.
Een uitvoervariabele instellen voor gebruik in dezelfde taak
Wanneer u een uitvoervariabele in dezelfde taak gebruikt, hoeft u de isoutput
eigenschap niet te gebruiken. De variabele is standaard beschikbaar voor downstreamstappen binnen dezelfde taak. Als u de isoutput
eigenschap echter toevoegt, moet u verwijzen naar de variabele met de taaknaam.
Met het script wordt hier de uitvoervariabele myJobVar
voor dezelfde taak ingesteld zonder op te geven en in te isoutput
stellen myOutputJobVar
met isoutput=true
.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isoutput=true]this is the same job too"
name: setOutput
Met dit script worden dezelfde taakvariabelen myJobVar
en myOutputJobVar
. U ziet dat de syntaxis verandert voor het verwijzen naar een uitvoervariabele zodra isoutput=true
deze is toegevoegd.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myJobVar]this is the same job"
- bash: |
echo "##vso[task.setvariable variable=myOutputJobVar;isoutput=true]this is the same job too"
name: setOutput
- bash: |
echo $(myJobVar)
- bash: |
echo $(setOutput.myOutputJobVar)
Een uitvoervariabele instellen voor gebruik in toekomstige taken
Wanneer u uitvoervariabelen in verschillende taken gebruikt, verwijst u ernaar met dependencies
. De syntaxis voor het openen van een uitvoervariabele in een toekomstige taak of fase varieert op basis van de relatie tussen de setter en de consument van de variabele. Meer informatie over elk geval in afhankelijkheden.
Stel eerst de uitvoervariabele myOutputVar
in.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isoutput=true]this is from job A"
name: passOutput
Vervolgens opent myOutputVar
u in een toekomstige taak en voert u de variabele uit als myVarFromJobA
. Als u deze wilt gebruiken dependencies
, moet u de dependsOn
eigenschap voor de toekomstige taak instellen met behulp van de naam van de vorige taak waarin de uitvoervariabele is ingesteld.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isoutput=true]this is from job A"
name: passOutput
- job: B
dependsOn: A
variables:
myVarFromJobA: $[ dependencies.A.outputs['passOutput.myOutputVar'] ]
steps:
- bash: |
echo $(myVarFromJobA)
Een uitvoervariabele instellen voor gebruik in toekomstige fasen
Uitvoervariabelen kunnen worden gebruikt in fasen in pijplijnen. U kunt uitvoervariabelen gebruiken om nuttige informatie door te geven, zoals de id van een gegenereerde uitvoer, van de ene fase naar de volgende.
Wanneer u een variabele met de isoutput
eigenschap instelt, kunt u in latere fasen naar die variabele verwijzen met de taaknaam en de stageDependencies
syntaxis. Meer informatie over afhankelijkheden.
Uitvoervariabelen zijn alleen beschikbaar in de volgende downstreamfase. Als meerdere fasen dezelfde uitvoervariabele gebruiken, gebruikt u de dependsOn
voorwaarde.
Stel eerst de uitvoervariabele myStageVal
in.
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
Wijs vervolgens in een toekomstige fase de uitvoervariabele myStageVal
toe aan een fase, taak of taakbereikvariabele, bijvoorbeeld myStageAVar
. De toewijzingssyntaxis maakt gebruik van een runtime-expressie $[]
en traceert het pad van naar de uitvoervariabele met behulp van stageDependencies
zowel de fasenaam (A
) als de taaknaam (A1
) om de variabele volledig in aanmerking te komen.
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]
steps:
- bash: echo $(myStageAVar)
Als uw waarde nieuwe regels bevat, kunt u deze escapen en wordt deze automatisch ongedaan door de agent weergegeven:
steps:
- bash: |
escape_data() {
local data=$1
data="${data//'%'/'%AZP25'}"
data="${data//$'\n'/'%0A'}"
data="${data//$'\r'/'%0D'}"
echo "$data"
}
echo "##vso[task.setvariable variable=myStageVal;isOutput=true]$(escape_data $'foo\nbar')"
name: MyOutputVar
Veelgestelde vragen
Mijn uitvoervariabele wordt niet weergegeven. Wat gaat er mis?
Er zijn enkele redenen waarom uw uitvoervariabele mogelijk niet wordt weergegeven.
- Uitvoervariabelen die zijn ingesteld met
isoutput
zijn niet beschikbaar in dezelfde taak en zijn in plaats daarvan alleen beschikbaar in downstreamtaken. - Afhankelijk van de syntaxis van de variabele die u gebruikt, is een variabele waarmee de waarde van een uitvoervariabele wordt ingesteld, mogelijk niet beschikbaar tijdens runtime. Variabelen met macrosyntaxis (
$(var)
) worden bijvoorbeeld verwerkt voordat een taak wordt uitgevoerd. Variabelen met sjabloonsyntaxis worden daarentegen verwerkt tijdens runtime ($[variables.var]
). Meestal wilt u de runtimesyntaxis gebruiken bij het instellen van uitvoervariabelen. Zie Variabelen definiëren voor meer informatie over de syntaxis van variabelen. - Er zijn mogelijk extra spaties in uw expressie. Als uw variabele niet wordt weergegeven, controleert u of er extra spaties rondom zijn
isOutput=true
.
U kunt de dependencies
uitvoer voor een pijplijntaak of fase oplossen door een variabele voor de afhankelijkheden toe te voegen en die variabele vervolgens af te drukken. In deze pijplijntaak A
wordt bijvoorbeeld de uitvoervariabele MyTask
ingesteld. De tweede taak (B
) is afhankelijk van de taak A
. Een nieuwe variabele bevat deps
de JSON-weergave van de taakafhankelijkheden. In de tweede stap in Taak B
wordt PowerShell gebruikt om af te drukken deps
, zodat u de taakafhankelijkheden kunt zien.
trigger:
- '*'
pool:
vmImage: 'ubuntu-latest'
jobs:
- job: A
steps:
- script: |
echo "##vso[task.setvariable variable=MyTask;isOutput=true]theoutputval"
name: ProduceVar
- job: B
dependsOn: A
variables:
varFromA: $[ dependencies.A.outputs['ProduceVar.MyTask'] ]
deps: $[convertToJson(dependencies)] # create a variable with the job dependencies
steps:
- script: echo $(varFromA) #
- powershell: Write-Host "$(deps)"