Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Když ve svých kanálech používáte skripty PowerShellu a Bash, je často užitečné nastavit proměnné, které pak můžete použít v budoucích úlohách. Nově nastavené proměnné nejsou ve stejném úkolu dostupné.
Skripty jsou skvělé, když chcete udělat něco, co úloha nepodporuje. Můžete například použít skript k volání vlastního rozhraní REST API a parsování odpovědi.
Příkaz protokolování
Poznámka:
Úlohy nasazení používají pro výstupní proměnné jinou syntaxi. Další informace o podpoře výstupních proměnných v úlohách nasazení najdete v tématu Úlohy nasazení.
Chcete-li použít proměnnou s podmínkou v pipelině, viz Určení podmínek.
Asi task.setvariable
Když přidáte proměnnou s task.setvariable, následující úlohy mohou proměnnou použít pomocí syntaxe makra $(myVar). Proměnná je ve výchozím nastavení dostupná jenom pro úkoly ve stejné úloze. Pokud přidáte parametr isOutput, syntaxe pro volání proměnné se změní. Další informace naleznete v tématu Nastavení výstupní proměnné pro použití ve stejné úloze.
Nastavte proměnnou myVar hodnotou foo.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
Přečtěte si proměnnou myVar:
- bash: |
echo "You can use macro syntax for variables: $(myVar)"
Nastavení vlastností proměnné
Příkaz task.setvariable zahrnuje vlastnosti pro nastavení proměnné jako tajné, jako výstupní proměnnou a jako pouze pro čtení. Mezi dostupné vlastnosti patří:
-
variable= název proměnné (povinné) -
isSecret= logická hodnota (volitelné, výchozí hodnota je false) -
isOutput= logická hodnota (volitelné, výchozí hodnota je false) -
isReadOnly= logická hodnota (volitelné, výchozí hodnota je false)
Chcete-li použít proměnnou v další fázi, nastavte isOutput vlastnost na true. Pokud chcete odkazovat na proměnnou s isOutput nastavenou na hodnotu true, zahrnete název úkolu. Například $(TaskName.myVar).
Když nastavíte proměnnou jen pro čtení, podřízené úkoly ji nemůžou přepsat. Nastavte isreadonly na hodnotu true. Nastavení proměnné jen pro čtení zvyšuje zabezpečení tím, že tuto proměnnou nastavíte jako neměnnou.
Nastavit proměnnou jako tajnou
Pokud issecret je nastavena hodnota true, hodnota proměnné se uloží jako tajný kód a maskuje se z protokolů.
Poznámka:
Azure Pipelines se snaží maskovat tajné kódy při generování dat do protokolů kanálu, takže můžete vidět další proměnné a data maskovaná ve výstupu a protokolech, které nejsou nastavené jako tajné kódy.
Nastavte tajnou proměnnou mySecretVal.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
Získejte tajnou proměnnou mySecretVal.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Výstup tajné proměnné v bash.
Úrovně výstupních proměnných
Existují čtyři různé typy výstupních proměnných s odlišnými syntaxemi:
-
Výstupní proměnné, které jsou nastavené v téže úloze bez použití parametru
isOutputPokud chcete na tyto proměnné odkazovat, použijte syntaxi makra. Příklad:$(myVar). -
Výstupní proměnné nastavené ve stejném úkolu s parametrem
isOutputPokud chcete na tyto proměnné odkazovat, zahrnete název úkolu. Příklad:$(myTask.myVar). -
Výstupní proměnné nastavené v budoucí úloze Pokud chcete na tyto proměnné odkazovat, odkazujete na proměnnou v oddílu
variablespomocí syntaxedependency. -
Výstupní proměnné nastavené v budoucích fázích Pokud chcete na tyto proměnné odkazovat, odkazujete na proměnnou v oddílu
variablespomocí syntaxestageDependencies.
Poznámka:
Budoucí fáze nebo úlohy mají přístup pouze k výstupním proměnným, pokud závisí na fázi nebo úloze, ve které byla proměnná nastavena. Aby byla výstupní proměnná přístupná, ujistěte se, že další fáze nebo úloha závisí na fázi nebo úloze, ve které jste proměnnou vytvořili. Pokud je potřeba použít stejnou výstupní proměnnou více fází nebo úloh, použijte podmínku dependsOn k vytvoření této závislosti.
Název výstupní proměnné se může změnit, pokud váš kanál používá strategii provádění , jako je úloha matice. V těchto případech nejprve vypíšete proměnnou, abyste ověřili její název. Můžete také vypsat všechny dostupné proměnné v pipeline pomocí skriptu env.
- script: env
displayName: 'Print all variables'
Nastavení výstupní proměnné pro použití ve stejné úloze
Pokud ve stejné úloze použijete výstupní proměnnou, nemusíte tuto isOutput vlastnost používat. Ve výchozím nastavení je proměnná dostupná pro podřízené kroky ve stejné úloze. Pokud však přidáte vlastnost isOutput, musíte na proměnnou odkazovat s názvem úlohy.
Skript zde nastaví výstupní proměnnou myJobVar pro stejnou úlohu bez zadání isOutput a nastaví myOutputJobVar pomocí 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
Tento skript získá proměnné myJobVar a myOutputJobVar stejné úlohy. Všimněte si, že se syntaxe změní pro odkazování na výstupní proměnnou po isOutput=true přidání.
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)
Nastavení výstupní proměnné pro použití v budoucích úlohách
Při použití výstupních proměnných napříč úlohami na ně odkazujete pomocí dependencies. Syntaxe pro přístup k výstupní proměnné v budoucí úloze nebo etapě se liší v závislosti na vztahu mezi nastavitelem a příjemcem proměnné. Přečtěte si o jednotlivých případech v závislostech.
Výstupní proměnné jsou k dispozici pouze v další podřízené úloze. Pokud více úloh spotřebovává stejnou výstupní proměnnou, použijte podmínku dependsOn .
Nejprve nastavte výstupní proměnnou myOutputVar.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is from job A"
name: passOutput
Dále se v budoucí úloze dostanete k myOutputVar a proměnnou vypíšete jako myVarFromJobA. Chcete-li použít dependencies, je nutné nastavit dependsOn vlastnost pro budoucí úlohu pomocí názvu předchozí úlohy, ve které byla nastavena výstupní proměnná.
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)
Nastavení výstupní proměnné pro použití v budoucích fázích
Výstupní proměnné je možné použít napříč fázemi v kanálech. Pomocí výstupních proměnných můžete předávat užitečné informace, jako je ID vygenerovaného výstupu, z jedné fáze do další.
Když nastavíte proměnnou s isOutput vlastností, můžete na tuto proměnnou odkazovat v pozdějších fázích s názvem úlohy a stageDependencies syntaxí. Přečtěte si další informace o závislostech.
Výstupní proměnné jsou k dispozici pouze v další podřízené fázi. Pokud více fází spotřebovává stejnou výstupní proměnnou, použijte podmínku dependsOn .
Nejprve nastavte výstupní proměnnou myStageVal.
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
Potom v budoucí fázi namapujte výstupní proměnnou myStageVal na proměnnou s oborem fáze, úlohy nebo úkolu, například myStageAVar. Všimněte si, že syntaxe mapování používá modul runtime výraz $[] a trasuje cestu od stageDependencies k výstupní proměnné pomocí názvu fáze (A) i názvu úlohy (A1) pro úplnou kvalifikaci proměnné.
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)
V případě, že vaše hodnota obsahuje nové řádky, můžete je escapovat a agent je automaticky unescapuje.
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
časté otázky
Výstupní proměnná se nevykresluje. Co se pokazí?
Existuje několik důvodů, proč se vaše výstupní proměnná nemusí zobrazit.
- Výstupní proměnné nastavené
isOutputs nejsou dostupné ve stejné úloze a místo toho jsou k dispozici pouze v podřízených úlohách. - V závislosti na tom, jakou syntaxi proměnné použijete, nemusí být proměnná, která nastaví hodnotu výstupní proměnné za běhu, k dispozici. Například proměnné s makro syntaxí (
$(var)) se zpracovávají před spuštěním úlohy. Naproti tomu se proměnné se syntaxí šablony zpracovávají za běhu ($[variables.var]). Při nastavování výstupních proměnných obvykle chcete použít syntaxi modulu runtime. Další informace o syntaxi proměnných najdete v tématu Definování proměnných. - Ve výrazu můžou být nadbytečné mezery. Pokud se vaše proměnná nevykresluje, zkontrolujte nadbytečné mezery kolem
isOutput=true.
Výstup dependencies úlohy kanálu nebo fáze můžete řešit odstraňováním problémů přidáním proměnné pro závislosti a následným vypsáním této proměnné. Například v této úloze kanálu A nastaví výstupní proměnnou MyTask. Druhá úloha (B) závisí na úloze A. Nová proměnná obsahuje deps reprezentaci JSON závislostí úloh. Druhý krok v úloze B používá PowerShell k zobrazení deps, abyste viděli závislosti úloh.
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)"