Változók meghatározása
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
A változók kényelmes módszert nyújtanak ahhoz, hogy fontos adatokat beillesszen a folyamat különböző részeibe. A változók használatának leggyakoribb módja egy olyan érték meghatározása, amelyet azután a folyamatban használhat. Minden változó sztring, és mindegyik módosítható. A változók értéke a folyamatban futtatásról futtatásra vagy feladatról feladatra módosítható.
Ha ugyanazt a változót több helyen, azonos néven definiálja, a helyi hatókörű változó nyer. A feladatszinten definiált változók tehát felülbírálhatnak egy változókészletet a fázis szintjén. A fázisszinten definiált változó felülbírál egy változókészletet a folyamat gyökérszintjén. A folyamat gyökérszintjének változókészlete felülbírál egy változókészletet a Folyamatbeállítások felhasználói felületén. A feladat, a fázis és a gyökérszinten definiált változók használatáról további információt a Változó hatóköre című témakörben talál.
A változók kifejezésekkel való használatával feltételesen hozzárendelhet értékeket, és további folyamatokat szabhat testre.
A változók nem azonosak a futtatási paraméterekkel. A futtatási paramétereket be kell írni, és a sablon elemzése során érhetők el.
Felhasználó által definiált változók
Változó definiálásakor különböző szintaxisokat (makró, sablonkifejezés vagy futtatókörnyezet) használhat, és a használt szintaxis határozza meg, hogy a változó hol jelenik meg a folyamatban.
A YAML-folyamatokban a változókat a gyökér, a fázis és a feladat szintjén állíthatja be. A felhasználói felületen a YAML-folyamaton kívül is megadhat változókat. Amikor beállít egy változót a felhasználói felületen, az titkosítható és titkosként állítható be.
A felhasználó által definiált változók írásvédettként állíthatók be. A változók elnevezési korlátozásai vannak (például a változónév elején nem használhatósecret
).
Egy változócsoport használatával több folyamaton keresztül is elérhetővé teheti a változókat.
Sablonokkal definiálhat változókat egy fájlban, amelyet több folyamat is használ.
Felhasználó által definiált többsoros változók
Az Azure DevOps támogatja a többsoros változókat, de van néhány korlátozás.
Előfordulhat, hogy az alsóbb rétegbeli összetevők, például a folyamatfeladatok nem kezelik megfelelően a változóértékeket.
Az Azure DevOps nem módosítja a felhasználó által definiált változóértékeket. A változóértékeket helyesen kell formázni, mielőtt többsoros változóként adjuk át őket. A változó formázásakor kerülje a speciális karaktereket, ne használjon korlátozott neveket, és győződjön meg arról, hogy az ügynök operációs rendszerének megfelelő sorvégző formátumot használ.
A többsoros változók az operációs rendszertől függően eltérően viselkednek. Ennek elkerülése érdekében győződjön meg arról, hogy helyesen formázza a többsoros változókat a cél operációs rendszer számára.
Az Azure DevOps soha nem módosítja a változóértékeket, még akkor sem, ha nem támogatott formázást biztosít.
Rendszerváltozók
A felhasználó által definiált változók mellett az Azure Pipelines előre definiált értékekkel rendelkező rendszerváltozókkal is rendelkezik. Az előre definiált Build.BuildId változó például megadja az egyes buildek azonosítóját, és különböző folyamatfuttatások azonosítására használható. A változót Build.BuildId
szkriptekben vagy feladatokban is használhatja, ha egyedi értékre van szüksége.
HA YAML- vagy klasszikus buildfolyamatokat használ, a rendszerváltozók átfogó listájának előre definiált változóit tekintheti meg.
Ha klasszikus kiadási folyamatokat használ, tekintse meg a kiadási változókat.
A rendszerváltozók a folyamat futtatásakor az aktuális értékükkel lesznek beállítva. Egyes változók automatikusan be vannak állítva. Folyamatkészítőként vagy végfelhasználóként a rendszerváltozó értékét a folyamat futtatása előtt módosíthatja.
A rendszerváltozók írásvédettek.
Környezeti változók
A környezeti változók a használt operációs rendszerre vonatkoznak. Platformspecifikus módon injektálják őket egy folyamatba. A formátum megfelel az adott szkriptelési platform környezeti változóinak formázásának.
UNIX rendszereken (macOS és Linux) a környezeti változók formátuma $NAME
. Windows rendszeren a formátum %NAME%
kötegelt és $env:NAME
PowerShell-alapú.
A rendszer- és felhasználó által definiált változók környezeti változókként is injektálhatók a platformhoz. Amikor a változók környezeti változókká alakulnak, a változók neve nagybetűssé válik, az időszakok pedig aláhúzásjelekké alakulnak. A változó neve any.variable
például a változó neve $ANY_VARIABLE
lesz.
A környezeti változókhoz változóelnevezési korlátozások vonatkoznak (például egy változónév elején nem használhatósecret
).
Változók elnevezési korlátozásai
A felhasználó által definiált és környezeti változók betűkből, számokból .
és _
karakterekből állhatnak. Ne használjon a rendszer által fenntartott változó előtagokat. Ezek a következők: endpoint
, input
, secret
, path
és securefile
. Az ilyen sztringekkel kezdődő változók (a nagybetűsítéstől függetlenül) nem lesznek elérhetők a tevékenységek és szkriptek számára.
Változószintaxis ismertetése
Az Azure Pipelines három különböző módszert támogat a változók hivatkozására: a makrókat, a sablonkifejezéseket és a futtatókörnyezeti kifejezéseket. Az egyes szintaxisokat más célra használhatja, és mindegyiknek vannak korlátai.
A folyamatokban a sablonkifejezés változói (${{ variables.var }}
) fordításkor, a futtatókörnyezet indítása előtt lesznek feldolgozva. A makrószintaxis változói ($(var)
) futásidőben lesznek feldolgozva, mielőtt egy feladat lefutna. A futtatókörnyezeti kifejezések ($[variables.var]
) futásidőben is feldolgozhatók, de feltételekkel és kifejezésekkel használhatók. Futtatókörnyezeti kifejezés használatakor a definíció teljes jobb oldalát ennek kell kitennie.
Ebben a példában láthatja, hogy a sablonkifejezés a változó frissítése után is a változó kezdeti értékével rendelkezik. A makrószintaxis változó értéke frissül. A sablonkifejezés értéke nem változik, mert az összes sablonkifejezés-változó feldolgozásra kerül fordításkor a feladatok futtatása előtt. Ezzel szemben a makrószintaxis változói az egyes tevékenységek futtatása előtt kiértékelnek.
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
Makrószintaxis változói
A legtöbb dokumentációs példa makrószintaxist ($(var)
) használ. A makrószintaxis célja, hogy a változóértékeket a tevékenységbemenetekbe és más változókba interpolálja.
A makrószintaxissal rendelkező változók feldolgozása a feladat futásideje során történő végrehajtása előtt történik. A futtatókörnyezet a sablonbővítés után történik. Amikor a rendszer makrókifejezéssel találkozik, lecseréli a kifejezést a változó tartalmára. Ha nincs ilyen nevű változó, akkor a makrókifejezés nem változik. Ha például $(var)
nem lehet lecserélni, $(var)
akkor a rendszer nem cseréli le semmit.
A makrószintaxis változói érték nélkül változatlanok maradnak, mert egy üres érték, például $()
jelenthet valamit a futtatott feladat számára, és az ügynök nem feltételezheti, hogy ezt az értéket szeretné lecserélni. Ha például egy Bash-feladat változójára foo
hivatkozik$(foo)
, a feladat bemenetében lévő összes $()
kifejezés cseréje megszakíthatja a Bash-szkripteket.
A makróváltozók csak akkor lesznek kibontva, ha egy értékhez használják őket, nem kulcsszóként. Az értékek a folyamatdefiníció jobb oldalán jelennek meg. A következő érvényes: key: $(value)
. A következő érvénytelen: $(key): value
. A makróváltozók nem lesznek kibontva, ha egy feladatnév beágyazott megjelenítésére szolgálnak. Ehelyett a tulajdonságot displayName
kell használnia.
Feljegyzés
A makrószintaxis változói csak a , jobs
és steps
a stages
.
Például nem használhat makrószintaxist egy resource
vagy trigger
.
Ez a példa a Bash, a PowerShell és egy szkriptfeladat makrószintaxisát használja. A makrószintaxissal rendelkező változók meghívásának szintaxisa mind a háromhoz megegyezik.
variables:
- name: projectName
value: contoso
steps:
- bash: echo $(projectName)
- powershell: echo $(projectName)
- script: echo $(projectName)
Sablonkifejezés szintaxisa
A sablonkifejezés szintaxisa a sablonparaméterek és a változók (${{ variables.var }}
) kibontására is használható. A sablonváltozók fordítási időben dolgoznak fel, és a futtatókörnyezet megkezdése előtt lecserélik. A sablonkifejezések a YAML egyes részeinek sablonként való újrafelhasználására lettek kialakítva.
A sablonváltozók csendesen üres sztringekké süllyesznek, ha nem található helyettesítő érték. A sablonkifejezések a makró- és futtatókörnyezeti kifejezésekkel ellentétben kulcsként (bal oldalon) vagy értékekként (jobb oldalon) jelenhetnek meg. A következő érvényes: ${{ variables.key }} : ${{ variables.value }}
.
Futtatókörnyezeti kifejezés szintaxisa
A futtatókörnyezeti kifejezés szintaxisa a futtatókörnyezetben ($[variables.var]
) kibontott változókhoz használható. A futtatókörnyezeti kifejezés változói csendesen üres sztringekké hatnak, ha nem található helyettesítő érték. Futásidejű kifejezések használata feladatfeltételekben a feladatok feltételes végrehajtásának támogatására vagy teljes szakaszokban.
A futtatókörnyezeti kifejezés változói csak akkor lesznek kibontva, ha egy értékhez használják őket, nem kulcsszóként. Az értékek a folyamatdefiníció jobb oldalán jelennek meg. A következő érvényes: key: $[variables.value]
. A következő érvénytelen: $[variables.key]: value
. A futtatókörnyezeti kifejezésnek egy kulcs-érték pár teljes jobb oldalát fel kell vennie. Például érvényes, key: $[variables.value]
de key: $[variables.value] foo
nem.
Syntax | Példa | Mikor történik a feldolgozás? | Hol bontja ki a folyamatdefiníciót? | Hogyan jelenik meg, ha nem található? |
---|---|---|---|---|
makró | $(var) |
futtatókörnyezet a feladat végrehajtása előtt | érték (jobb oldal) | Nyomatok $(var) |
sablonkifejezés | ${{ variables.var }} |
fordítási idő | kulcs vagy érték (bal vagy jobb oldal) | üres sztring |
futtatókörnyezeti kifejezés | $[variables.var] |
Runtime | érték (jobb oldal) | üres sztring |
Milyen szintaxist használjak?
Makrószintaxis használata, ha egy tevékenységhez ad bemenetet.
Ha feltételekkel és kifejezésekkel dolgozik, válasszon futtatókörnyezeti kifejezést. Ne használjon futtatókörnyezeti kifejezést, ha nem szeretné kinyomtatni az üres változót (például: $[variables.var]
). Ha például olyan feltételes logikával rendelkezik, amely egy adott értékkel vagy értékkel nem rendelkező változóra támaszkodik. Ebben az esetben makrókifejezést kell használnia.
Ha változót definiál egy sablonban, használjon sablonkifejezést.
Változók beállítása a folyamatban
A leggyakoribb esetben beállítja a változókat, és a YAML-fájlban használja őket. Ez lehetővé teszi a változó módosításainak nyomon követését a verziókövetési rendszerben. A folyamatbeállítások felhasználói felületén változókat is definiálhat (lásd a Klasszikus lapot), és hivatkozhat rájuk a YAML-ben.
Íme egy példa, amely bemutatja, hogyan állíthat be két változót, configuration
és platform
hogyan használhatja őket később a lépések során. Ha egy változót egy YAML-utasításban szeretne használni, csomagolja be.$()
A változók nem definiálhatók repository
YAML-utasításban.
# 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)
Változó hatókörök
A YAML-fájlban különböző hatókörökben állíthat be változókat:
- A gyökérszinten, hogy elérhetővé tegye a folyamat összes feladatának.
- A fázis szintjén, hogy csak egy adott szakasz számára legyen elérhető.
- Feladatszinten, hogy csak egy adott feladat számára legyen elérhető.
Amikor meghatároz egy változót egy YAML tetején, a változó a folyamat összes feladata és fázisa számára elérhető, és globális változó. A YAML-ben definiált globális változók nem láthatók a folyamatbeállítások felhasználói felületén.
A feladatszintű változók felülbírálják a változókat a gyökér- és a fázisszinten. A fázisszintű változók felülbírálják a változókat a gyökérszinten.
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
Mindkét feladat kimenete így néz ki:
# job1
value
value1
value1
# job2
value
value2
value
Változók megadása
Az előző példákban a variables
kulcsszót a kulcs-érték párok listája követi.
A kulcsok a változók nevei, az értékek pedig a változóértékek.
Van egy másik szintaxis, amely akkor hasznos, ha változókhoz vagy változócsoportokhoz szeretne sablonokat használni.
Sablonokkal a változók definiálhatók egy YAML-fájlban, és egy másik YAML-fájlban is megtalálhatók.
A változócsoportok olyan változók, amelyeket több folyamaton keresztül is használhat. Lehetővé teszik olyan változók kezelését és rendszerezését, amelyek egy helyen gyakoriak a különböző szakaszokban.
Használja ezt a szintaxist a folyamat gyökérszintjén lévő változósablonokhoz és változócsoportokhoz.
Ebben a másodlagos szintaxisban a variables
kulcsszó a változók megadóinak listáját tartalmazza.
A változójelölők name
egy normál változóhoz, group
egy változócsoporthoz tartoznak, és template
egy változósablont is tartalmaznak.
Az alábbi példa mindháromat szemlélteti.
variables:
# a regular variable
- name: myvariable
value: myvalue
# a variable group
- group: myvariablegroup
# a reference to a variable template
- template: myvariabletemplate.yml
További információ a változók sablonokkal való újrafelhasználásáról.
Változók elérése a környezeten keresztül
Figyelje meg, hogy a változók környezeti változókon keresztül is elérhetők a szkriptek számára. A környezeti változók használatának szintaxisa a szkriptnyelvtől függ.
A név nagybetűs, a helyére pedig a .
_
. Ez automatikusan be lesz szúrva a folyamatkörnyezetbe. Íme néhány példa:
- Batch-szkript:
%VARIABLE_NAME%
- PowerShell-szkript:
$env:VARIABLE_NAME
- Bash-szkript:
$VARIABLE_NAME
Fontos
A fájlelérési utakat tartalmazó előre definiált változók az ügynök gazdagéptípusa és a rendszerhéj típusa alapján a megfelelő stílusra (Windows-stílus: C:\foo\ és Unix stílus /foo/) lesznek lefordítva. Ha Bash-szkriptfeladatokat futtat Windows rendszeren, a környezeti változó metódus használatával érheti el ezeket a változókat a folyamatváltozó metódus helyett, hogy a megfelelő fájlelérési útvonal-stílussal rendelkezzen.
Titkos változók beállítása
Tipp.
A titkos változók nem lesznek automatikusan exportálva környezeti változókként. Ha titkos változókat szeretne használni a szkriptekben, explicit módon képezheti le őket környezeti változókra. További információ: Titkos kódváltozók beállítása.
Ne állítson be titkos változókat a YAML-fájlban. Az operációs rendszerek gyakran naplózzák az általuk futtatott folyamatok parancsait, és nem szeretné, hogy a napló tartalmazzon bemenetként átadott titkos kódot. Használja a szkript környezetét, vagy képezheti le a blokkon belüli változót, variables
hogy titkos kulcsokat adjon át a folyamatnak.
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.
Titkos változókat kell beállítania a folyamat folyamatbeállítási felhasználói felületén. Ezek a változók hatóköre arra a folyamatra terjed ki, amelyben be vannak állítva. A titkos változókat változócsoportokban is beállíthatja.
Ha titkos kulcsokat szeretne beállítani a webes felületen, kövesse az alábbi lépéseket:
- Lépjen a Folyamatok lapra, válassza ki a megfelelő folyamatot, majd válassza a Szerkesztés lehetőséget.
- Keresse meg a folyamat változóit .
- Adja hozzá vagy frissítse a változót.
- A változó titkosított tárolásához válassza az érték titokban tartásának lehetőségét.
- Mentse a folyamatot.
A titkos változók inaktív állapotban, 2048 bites RSA-kulccsal vannak titkosítva. A titkos kódok az ügynökön érhetők el a használni kívánt feladatokhoz és szkriptekhez. Ügyeljen arra, hogy kinek van hozzáférése a folyamat módosításához.
Fontos
Igyekszünk elfedni a titkos kulcsokat az Azure Pipelines kimenetében való megjelenéstől, de óvintézkedéseket kell tennie. Soha ne visszhangozza a titkos kulcsokat kimenetként. Néhány operációs rendszer naplójának parancssori argumentumai. Soha ne adjon át titkos kulcsokat a parancssorban. Ehelyett azt javasoljuk, hogy a titkos kulcsokat környezeti változókra képezheti le.
Soha nem maszkoljuk a titkos kódok részszúrásait. Ha például az "abc123" titkos kódként van beállítva, az "abc" nem maszkolódik a naplókból. Ennek az az oka, hogy a titkos kulcsok túl részletes elfedésének elkerülése érdekében a naplók olvashatatlanok lesznek. Ezért a titkos kódok nem tartalmazhatnak strukturált adatokat. Ha például a"{ "foo": "bar" }" titkos kódként van beállítva, a "bar" nem lesz maszkolva a naplókból.
A normál változókkal ellentétben a rendszer nem fejti vissza automatikusan a szkriptek környezeti változóira. Explicit módon le kell képeznie a titkos változókat.
Az alábbi példa bemutatja, hogyan képezheti le és használhatja a PowerShell- és Bash-szkriptekben hívott mySecret
titkos változókat. Két globális változó van definiálva. GLOBAL_MYSECRET
egy titkos változó mySecret
értékét rendeli hozzá, és GLOBAL_MY_MAPPED_ENV_VAR
egy nem titkos változó nonSecretVariable
értékét rendeli hozzá. A normál folyamatváltozótól eltérően nincs neve környezeti változónak MYSECRET
.
A PowerShell-feladat egy szkriptet futtat a változók nyomtatásához.
$(mySecret)
: Ez közvetlen hivatkozás a titkos változóra, és működik.$env:MYSECRET
: Ez környezeti változóként próbálja elérni a titkos változót, ami nem működik, mert a titkos változók nem lesznek automatikusan leképezve a környezeti változókra.$env:GLOBAL_MYSECRET
: Ez egy globális változón keresztül próbálja elérni a titkos változót, amely szintén nem működik, mert a titkos változók nem képezhetők le így.$env:GLOBAL_MY_MAPPED_ENV_VAR
: Ez egy globális változón keresztül éri el a nem titkos változót, amely működik.$env:MY_MAPPED_ENV_VAR
: Ez egy feladatspecifikus környezeti változón keresztül éri el a titkos változót, amely a titkos változók környezeti változókhoz való leképezésének ajánlott módja.
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
Az előző szkript mindkét tevékenységének kimenete így nézne ki:
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: ***
A szkripteken kívül titkos változókat is használhat. A titkos változókat például leképezheti a feladatokra a variables
definíció használatával. Ez a példa bemutatja, hogyan használhat titkos változókat $(vmsUser)
és $(vmsAdminPass)
azure-fájlmásolási feladatokat.
variables:
VMS_USER: $(vmsUser)
VMS_PASS: $(vmsAdminPass)
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureFileCopy@4
inputs:
SourcePath: 'my/path'
azureSubscription: 'my-subscription'
Destination: 'AzureVMs'
storage: 'my-storage'
resourceGroup: 'my-rg'
vmsAdminUserName: $(VMS_USER)
vmsAdminPassword: $(VMS_PASS)
Titkos kód változóinak hivatkozása változócsoportokban
Ez a példa bemutatja, hogyan hivatkozhat egy változócsoportra a YAML-fájlban, és hogyan adhat hozzá változókat a YAML-ben. A változócsoport két változót használ: user
és token
. A token
változó titkos, és a környezeti változóra $env:MY_MAPPED_TOKEN
van leképezve, hogy hivatkozni lehessen rá a YAML-ben.
Ez a YAML REST-hívást indít a kiadások listájának lekéréséhez, és megjeleníti az eredményt.
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
Fontos
A GitHub-adattárakban alapértelmezés szerint a folyamathoz társított titkos változók nem érhetők el az elágaztatások lekérési kéréseinek összeállításához. További információt az elágazásokból származó hozzájárulások című témakörben talál.
Változók megosztása folyamatok között
Ha több folyamat változóit szeretné megosztani a projektben, használja a webes felületet. A Kódtár csoportban használjon változócsoportokat.
Kimeneti változók használata tevékenységekből
Egyes tevékenységek kimeneti változókat határoznak meg, amelyeket az alsóbb rétegbeli lépésekben, feladatokban és szakaszokban használhat fel. A YAML-ben a különböző feladatok és szakaszok változóit függőségek használatával érheti el.
Ha mátrixfeladatokra hivatkozik az alsóbb rétegbeli tevékenységekben, más szintaxist kell használnia. Lásd: Többfeladatos kimeneti változó beállítása. Az üzembehelyezési feladatok változóihoz másik szintaxist is használnia kell. Lásd: A kimeneti változók támogatása az üzembe helyezési feladatokban.
Egyes tevékenységek kimeneti változókat határoznak meg, amelyeket az alsóbb rétegbeli lépésekben és feladatokban használhat fel ugyanabban a fázisban. A YAML-ben a különböző feladatok változóit függőségek használatával érheti el.
- Ha egy másik feladatból származó változóra szeretne hivatkozni ugyanazon a feladaton belül, használja a következőt
TASK.VARIABLE
: . - Ha egy másik feladatból származó tevékenység változóira szeretne hivatkozni, használja a következőt
dependencies.JOB.outputs['TASK.VARIABLE']
: .
Feljegyzés
Alapértelmezés szerint a folyamat minden szakasza a YAML-fájlban lévő előtt lévőtől függ. Ha olyan szakaszra kell hivatkoznia, amely nem közvetlenül az aktuális előtt van, felülbírálhatja ezt az automatikus alapértelmezett beállítást úgy, hogy hozzáad egy szakaszt dependsOn
a szakaszhoz.
Feljegyzés
Az alábbi példák szabványos folyamatszintaxist használnak. Ha üzembehelyezési folyamatokat használ, a változó és a feltételes változó szintaxisa is eltérő lesz. A használni kívánt szintaxissal kapcsolatos információkért lásd az üzembe helyezési feladatokat.
Ezekben a példákban tegyük fel, hogy van egy feladatunk MyTask
, amely egy úgynevezett kimeneti változót MyVar
állít be.
További információ a Kifejezések – Függőségek szintaxisáról.
Kimenetek használata ugyanabban a feladatban
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
Kimenetek használata másik feladatban
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
Kimenetek használata más fázisban
Ha egy másik fázis kimenetét szeretné használni, a hivatkozó változók formátuma a következő stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE']
: . A fázis szintjén, de a feladat szintjén ezeket a változókat feltételek között használhatja.
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
.
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
A fázisok közötti változókat fájlbemenettel is átadhatja. Ehhez a második szakaszban meg kell határoznia a változókat a feladat szintjén, majd bemenetként env:
kell átadnia a változókat.
## 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)
Az előző folyamat szakaszainak kimenete a következőképpen néz ki:
Hello inline version
true
crushed tomatoes
Változók listázása
A folyamat összes változóját az az pipelines változólista paranccsal listázhatja. Első lépésként tekintse meg az Azure DevOps parancssori felület használatának első lépéseit.
az pipelines variable list [--org]
[--pipeline-id]
[--pipeline-name]
[--project]
Paraméterek
- org: Azure DevOps-szervezet URL-címe. Az alapértelmezett szervezetet konfigurálhatja a következővel
az devops configure -d organization=ORG_URL
: . Kötelező, ha nincs alapértelmezettként konfigurálva, vagy ha a rendszer felvette a következőtgit config
: . Példa:--org https://dev.azure.com/MyOrganizationName/
- folyamatazonosító: Szükség van rá, ha a folyamat neve nem szerepel a megadott adatok között. A folyamat azonosítója.
- pipeline-name: Kötelező, ha a folyamatazonosító nincs megadva, de figyelmen kívül hagyva, ha a folyamatazonosító meg van adva. A folyamat neve.
- projekt: A projekt neve vagy azonosítója. Az alapértelmezett projektet konfigurálhatja a következővel
az devops configure -d project=NAME_OR_ID
: . Kötelező, ha nincs alapértelmezettként konfigurálva, vagy ha a használatávalgit config
veszi fel a elemet.
Példa
Az alábbi parancs felsorolja a folyamat összes változóját 12-s azonosítóval, és táblaformátumban jeleníti meg az eredményt.
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
Változók beállítása szkriptekben
A szkriptek meghatározhatnak olyan változókat, amelyeket később a folyamat későbbi lépései során használnak fel. A metódus által beállított összes változó sztringként lesz kezelve. Ha egy változót egy szkriptből szeretne beállítani, használja a parancs szintaxisát, és nyomtassa ki az stdout parancsot.
Feladat hatókörű változó beállítása szkriptből
Ha egy változót parancsfájlból szeretne beállítani, használja a naplózási task.setvariable
parancsot. Ez frissíti a környezeti változókat a későbbi feladatokhoz. A későbbi feladatok hozzáférhetnek az új változóhoz makrószintaxissal és a tevékenységekben környezeti változóként.
Ha issecret
igaz, a változó értéke titkosként lesz mentve, és maszkolva lesz a naplóból. A titkos változókkal kapcsolatos további információkért lásd a naplózási parancsokat.
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)
A következő lépésekben a folyamatváltozó is hozzá lesz adva a környezethez. A definiált lépésben nem használhatja a változót.
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"
Az előző folyamat kimenete.
my environment variable is crushed tomatoes
my environment variable is crushed tomatoes
Többfeladatos kimeneti változó beállítása
Ha elérhetővé szeretne tenni egy változót a jövőbeli feladatok számára, a következővel isOutput=true
kimeneti változóként kell megjelölnie. Ezután a szintaxissal és a $[]
változót beállítva a lépés nevével leképítheti a jövőbeli feladatokba. A többfeladatos kimeneti változók csak ugyanabban a szakaszban lévő feladatokhoz működnek.
Ha változókat szeretne átadni a különböző fázisokban lévő feladatoknak, használja a szakaszfüggőségek szintaxisát .
Feljegyzés
Alapértelmezés szerint a folyamat minden szakasza a YAML-fájlban lévő előtt lévőtől függ. Ezért minden fázis használhatja az előző fázis kimeneti változóit. A további szakaszok eléréséhez módosítania kell a függőségi gráfot, például ha a 3. fázishoz egy változóra van szükség az 1. fázisból, explicit függőséget kell deklarálnia az 1. fázisban.
Többfeladatos kimeneti változó létrehozásakor a kifejezést hozzá kell rendelnie egy változóhoz. Ebben a YAML-ben $[ dependencies.A.outputs['setvarStep.myOutputVar'] ]
a változóhoz $(myVarFromJobA)
van rendelve.
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
Az előző folyamat kimenete.
this is the value
this is the value
Ha változót állít be egyik fázisból a másikba, használja a következőt 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)
Ha egy mátrixból vagy szeletből állít be változót, akkor ha egy alsóbb rétegbeli feladatból éri el a változót, a következőket kell tartalmaznia:
- A feladat neve.
- A lépés.
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
Ügyeljen arra, hogy a feladat nevét az üzembehelyezési feladat kimeneti változóira előtagként adja meg. Ebben az esetben a feladat neve: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
Változók beállítása kifejezések használatával
A változók kifejezéssel állíthatók be. Már találkoztunk ilyen esettel, amikor egy változót egy másik kimenetére állítottunk be egy korábbi feladatból.
- job: B
dependsOn: A
variables:
myVarFromJobsA1: $[ dependencies.A.outputs['job1.setvarStep.myOutputVar'] ] # remember to use single quotes
A változó beállításához a támogatott kifejezések bármelyikét használhatja. Íme egy példa egy olyan változó beállítására, amely számlálóként működik, amely 100-nál kezdődik, minden futtatásnál 1-zel növekszik, és naponta 100-ra lesz visszaállítva.
jobs:
- job:
variables:
a: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 100)]
steps:
- bash: echo $(a)
A számlálókkal, függőségekkel és más kifejezésekkel kapcsolatos további információkért lásd a kifejezéseket.
Beállítási változók konfigurálása lépésekhez
Definiálhat settableVariables
egy lépésen belül, vagy megadhatja, hogy nem állíthatók be változók.
Ebben a példában a szkript nem tud változót beállítani.
steps:
- script: echo This is a step
target:
settableVariables: none
Ebben a példában a szkript engedélyezi a változót sauce
, de a változót secretSauce
nem. A folyamatfuttatási lapon figyelmeztetés jelenik meg.
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
Engedélyezés várakozási idő alatt
Ha egy változó megjelenik egy variables
YAML-fájl blokkjában, az értéke rögzített, és nem bírálható felül az üzenetsor idején. Az ajánlott eljárás a változók YAML-fájlban való definiálása, de vannak olyan esetek, amikor ennek nincs értelme. Előfordulhat például, hogy titkos változót szeretne definiálni, és nem szeretné, hogy a változó elérhető legyen a YAML-ben. Vagy előfordulhat, hogy manuálisan kell beállítania egy változóértéket a folyamat futtatása során.
Az üzenetsor-idő értékek meghatározására két lehetőség áll rendelkezésre. Definiálhat egy változót a felhasználói felületen, és kiválaszthatja azt a lehetőséget, hogy a felhasználók felülbírálják ezt az értéket a folyamat futtatásakor, vagy használhat helyette futtatókörnyezeti paramétereket. Ha a változó nem titkos, akkor ajánlott futtatókörnyezeti paramétereket használni.
Ha várólistán szeretne beállítani egy változót, vegyen fel egy új változót a folyamatba, és válassza a felülbírálási lehetőséget.
Annak érdekében, hogy egy változót várakozási időben lehessen beállítani, győződjön meg arról, hogy a változó nem jelenik meg egy variables
folyamat vagy feladat blokkjában sem. Ha egy változót a YAML változóblokkjában és a felhasználói felületen is meghatároz, a YAML-ben lévő érték prioritással rendelkezik.
Változók bővítése
Ha egy változót több hatókörben is ugyanazzal a névvel állít be, a következő prioritási sorrend érvényesül (első helyen a legmagasabb prioritás).
- A YAML-fájlban beállított feladatszintű változó
- A YAML-fájlban beállított fázisszszintű változó
- A YAML-fájlban beállított folyamatszintű változó
- Várakozás során beállított változó
- Folyamatbeállítások felhasználói felületén beállított folyamatváltozó
Az alábbi példában ugyanez a változó a
a YAML-fájl folyamat- és feladatszintjén van beállítva. Emellett egy változócsoportban G
, valamint a Folyamatbeállítások felhasználói felületén lévő változóként is be van állítva.
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'
Ha egy azonos nevű változót állít be ugyanabban a hatókörben, az utolsó beállítás értéke elsőbbséget élvez.
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
Feljegyzés
Amikor beállít egy változót a YAML-fájlban, ne definiálja azt a webes szerkesztőben az üzenetsor idején beállított beállításként. Jelenleg nem módosíthatja a YAML-fájlban az üzenetsor idején beállított változókat. Ha egy változót várólista idején kell beállítania, ne állítsa be a YAML-fájlban.
A változók a futtatás indításakor, majd az egyes lépések elején egyszer lesznek kibontva. Példa:
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
Az előző példában két lépés szerepel. A bővítés $(a)
egyszer történik a feladat elején, és egyszer a két lépés elején.
Mivel a változók a feladat elején vannak kibontva, nem használhatja őket stratégiában. Az alábbi példában nem használhatja a változót a
a feladatmátrix kibontására, mert a változó csak az egyes kibontott feladatok elején érhető el.
jobs:
- job: A
variables:
a: 10
strategy:
matrix:
x:
some_variable: $(a) # This does not work
Ha a változó a
egy korábbi feladat kimeneti változója, akkor egy későbbi feladatban is használhatja.
- 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'] ]
Rekurzív bővítés
Az ügynökben a szintaxissal $( )
hivatkozott változók rekurzívan ki vannak bontva.
Példa:
variables:
myInner: someValue
myOuter: $(myInner)
steps:
- script: echo $(myOuter) # prints "someValue"
displayName: Variable is $(myOuter) # display name is "Variable is someValue"