Megosztás a következőn keresztül:


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.

Képernyőkép a bash változó kimenetéről.

Kimeneti változók szintjei

A kimeneti változóknak négy különböző típusa van különböző szintaxisokkal:

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 dependenciesbe 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 Afü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)"