Változók beállítása szkriptekben
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Ha PowerShell- és Bash-szkripteket használ a folyamatokban, gyakran hasznos lehet olyan változókat beállítani, amelyeket később használhat a jövőbeni feladatokban. Az újonnan beállított változók nem érhetők el ugyanabban a feladatban.
A szkriptek kiválóan alkalmasak olyan műveletek végrehajtására, amelyeket egy feladat nem támogat, például meghív egy egyéni REST API-t, és elemzi a választ.
A naplózási task.setvariable
paranccsal változókat állíthat be a PowerShell- és Bash-szkriptekben.
Feljegyzés
Az üzembehelyezési feladatok eltérő szintaxist használnak a kimeneti változókhoz. Az üzembehelyezési feladatok kimeneti változóinak támogatásáról további információt az Üzembe helyezési feladatok című témakörben talál.
Ha egy változót feltétellel szeretne használni egy folyamatban, olvassa el a Feltételek megadása című témakört.
Körülbelül task.setvariable
Ha hozzáad egy változót task.setvariable
, az alábbi feladatok makrószintaxissal $(myVar)
használhatják a változót. A változó alapértelmezés szerint csak ugyanabban a feladatban lévő tevékenységek számára lesz elérhető. Ha hozzáadja a paramétert isoutput
, az a szintaxis, amely meghívja a változó változásait. Lásd: Kimeneti változó beállítása ugyanabban a feladatban való használatra.
Állítsa be a változót myVar
az értékkel foo
.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
Olvassa el a változót myVar
:
- bash: |
echo "You can use macro syntax for variables: $(myVar)"
Változótulajdonságok beállítása
A task.setvariable
parancs tartalmazza a változó titkos, kimeneti változóként és írásvédettként történő beállításának tulajdonságait. Az elérhető tulajdonságok a következők:
variable
= változó neve (kötelező)issecret
= logikai (nem kötelező, alapértelmezés szerint hamis)isoutput
= logikai (nem kötelező, alapértelmezés szerint hamis)isreadonly
= logikai (nem kötelező, alapértelmezés szerint hamis)
Ha a változót a következő szakaszban szeretné használni, állítsa a tulajdonságot a isoutput
következőre true
. Ha igaz értékre szeretne hivatkozni egy isoutput
változóra, a feladat nevét is tartalmaznia kell. Például: $(TaskName.myVar)
.
Ha csak olvashatóként állít be változót, az alsóbb rétegbeli tevékenységek nem írhatók felül. Állítsa a isreadonly
elemet true
értékre. A változó írásvédettként való beállítása csak a változó nem módosíthatóvá tételével növeli a biztonságot.
Változó beállítása titkos kódként
Ha issecret
igaz értékre van állítva, a rendszer titkosként menti a változó értékét, és elrejti a naplókból.
Feljegyzés
Az Azure Pipelines arra törekszik, hogy titkos kulcsokat rejtsen el, amikor adatokat bocsát ki a folyamatnaplókba, így további változókat és adatokat láthat a kimenetben és a naplókban, amelyek nincsenek titkos kulcsként beállítva.
Állítsa be a titkos változót mySecretVal
.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
Kérje le a titkos változót mySecretVal
.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Titkos változó kimenete a bashben.
Kimeneti változók szintjei
A kimeneti változóknak négy különböző típusa van különböző szintaxisokkal:
- A kimeneti változók ugyanabban a feladatban, paraméter nélkül lesznek
isoutput
beállítva. A változókra való hivatkozáshoz makrószintaxist kell használnia. Példa:$(myVar)
- A kimeneti változók ugyanabban a feladatban lesznek beállítva a
isoutput
paraméterrel. A változókra való hivatkozáshoz meg kell adnia a feladat nevét. Példa:$(myTask.myVar)
- Egy jövőbeli feladatban beállított kimeneti változók. A változókra való hivatkozáshoz a szakaszban szereplő
variables
, szintaxissal ellátott változóradependency
fog hivatkozni. - A jövőbeli szakaszokban beállított kimeneti változók. A változókra való hivatkozáshoz a szakaszban szereplő
variables
, szintaxissal ellátott változórastageDependencies
fog hivatkozni.
Feljegyzés
A jövőbeli szakaszok vagy feladatok csak akkor férhetnek hozzá a kimeneti változókhoz, ha azok attól a fázistól vagy feladattól függenek, ahol a változót beállították. Ha elérhetővé szeretne tenni egy kimeneti változót, győződjön meg arról, hogy a következő szakasz vagy feladat attól a fázistól vagy feladattól függ, ahol a változót létrehozta. Ha több fázisnak vagy feladatnak is ugyanazt a kimeneti változót kell használnia, a feltételt használva állapítsa meg ezt a dependsOn
függőséget.
Kimeneti változó beállítása ugyanabban a feladatban való használatra
Ha egy kimeneti változót ugyanabban a feladatban használ, nem kell használnia a tulajdonságot isoutput
. Alapértelmezés szerint a változó elérhető lesz az ugyanazon a feladaton belüli alsóbb rétegbeli lépésekhez. Ha azonban hozzáadja a isoutput
tulajdonságot, hivatkoznia kell a változóra a tevékenység nevével.
Az itt található szkript az azonos feladatú kimeneti változót myJobVar
isoutput
adja meg és állítja be myOutputJobVar
a következővel 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
Ez a szkript ugyanazokat a feladatváltozókat myJobVar
és myOutputJobVar
. Figyelje meg, hogy a kimeneti változóra való hivatkozás szintaxisa megváltozik a hozzáadás után 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
- bash: |
echo $(myJobVar)
- bash: |
echo $(setOutput.myOutputJobVar)
Kimeneti változó beállítása jövőbeli feladatokhoz
Amikor kimeneti változókat használ a feladatok között, hivatkozni fog rájuk a következővel dependencies
: . A kimeneti változó jövőbeli feladatokban vagy fázisokban való elérésének szintaxisa a változó beállítója és felhasználója közötti kapcsolattól függően változik. Ismerje meg a függőségek minden esetét.
Először állítsa be a kimeneti változót myOutputVar
.
jobs:
- job: A
steps:
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isoutput=true]this is from job A"
name: passOutput
Ezután lépjen be myOutputVar
egy jövőbeli feladatba, és adja ki a változót .myVarFromJobA
A használathoz dependencies
be kell állítania a dependsOn
tulajdonságot a jövőbeli feladaton annak a korábbi feladatnak a nevével, amelyben a kimeneti változó be lett állítva.
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)
Kimeneti változó beállítása későbbi szakaszokban való használatra
A kimeneti változók a folyamatok szakaszaiban használhatók. A kimeneti változók segítségével hasznos információkat adhat át, például egy generált kimenet azonosítóját egyik fázisból a másikba.
Ha beállít egy változót a isoutput
tulajdonsággal, később hivatkozhat erre a változóra a tevékenység nevével és stageDependencies
szintaxisával. További információ a függőségekről.
A kimeneti változók csak a következő alsó szakaszban érhetők el. Ha több fázis is ugyanazt a kimeneti változót használja, használja a feltételt dependsOn
.
Először állítsa be a kimeneti változót myStageVal
.
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
Ezután egy későbbi szakaszban képezheti le a kimeneti változót myStageVal
egy fázis- vagy feladat- vagy tevékenységhatókörű változóra, például myStageAVar
. Vegye figyelembe, hogy a leképezési szintaxis egy futtatókörnyezeti kifejezést $[]
használ, és a szakasznév (A
) és a feladatnév (A1
) használatával nyomon követi a kimeneti változó elérési stageDependencies
útját a változó teljes minősítéséhez.
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)
Ha az érték új vonalakat tartalmaz, elkerülheti őket, és az ügynök automatikusan felfedi azt:
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
GYIK
A kimeneti változóm nem renderel. Mi a baj?
Előfordulhat, hogy a kimeneti változó nem jelenik meg.
- A kimeneti változók nem
isoutput
érhetők el ugyanabban a feladatban, és csak az alsóbb rétegbeli feladatokban érhetők el. - A használt változószintaxistól függően előfordulhat, hogy a kimeneti változó értékét meghatározó változó futásidőben nem érhető el. A makrószintaxissal (
$(var)
) rendelkező változók például a feladat futtatása előtt lesznek feldolgozva. Ezzel szemben a sablonszintaxissal rendelkező változók futásidőben ($[variables.var]
) lesznek feldolgozva. A kimeneti változók beállításakor általában futásidejű szintaxist érdemes használni. A változószintaxissal kapcsolatos további információkért lásd a változók definiálása című témakört. - Előfordulhat, hogy a kifejezésben további szóközök is vannak. Ha a változó nem renderel, ellenőrizze, hogy nincsenek-e további szóközök a környezetében
isOutput=true
.
A folyamatfeladatok vagy fázisok kimenetének dependencies
hibaelhárításához adjon hozzá egy változót a függőségekhez, majd nyomtasd ki a változót. Ebben a folyamatfeladatban A
például a kimeneti változót MyTask
állítja be. A második feladat (B
) a feladattól A
függ. Egy új változó deps
a feladatfüggőségek JSON-ábrázolását tartalmazza. A Feladat B
második lépése a PowerShell használatával nyomtatja ki deps
a feladat függőségeit.
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)"