Aracılığıyla paylaş


Betiklerde değişkenleri ayarlama

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

İşlem hatlarınızda PowerShell ve Bash betikleri kullandığınızda, gelecekteki görevlerde kullanabileceğiniz değişkenleri ayarlamak genellikle yararlıdır. Yeni ayarlanan değişkenler aynı görevde kullanılamaz.

Betikler, özel REST API çağırma ve yanıtı ayrıştırma gibi bir görev tarafından desteklenmeyen bir işlem yapmak istediğinizde harikadır.

PowerShell ve Bash betiklerinde değişkenleri ayarlamak için günlüğe kaydetme komutunu kullanacaksınıztask.setvariable.

Not

Dağıtım işleri, çıkış değişkenleri için farklı bir söz dizimi kullanır. Dağıtım işlerinde çıkış değişkenleri desteği hakkında daha fazla bilgi edinmek için bkz . Dağıtım işleri.

İşlem hattında koşul içeren bir değişken kullanmak için bkz . Koşulları belirtme.

Hakkı -nda task.setvariable

ile task.setvariablebir değişken eklediğinizde, aşağıdaki görevler makro söz dizimini $(myVar)kullanarak değişkenini kullanabilir. Değişken, varsayılan olarak yalnızca aynı işteki görevler için kullanılabilir. parametresini isoutputeklerseniz, değişkeninizi çağırmak için söz dizimi değişir. Bkz. Aynı işte kullanılacak bir çıkış değişkeni ayarlama.

değişkenini myVar değeriyle fooayarlayın.

- bash: |
    echo "##vso[task.setvariable variable=myVar;]foo"

değişkenini myVarokuyun:

- bash: |
    echo "You can use macro syntax for variables: $(myVar)"

Değişken özelliklerini ayarlama

komutu, task.setvariable bir değişkeni gizli dizi olarak, çıkış değişkeni olarak ve salt okunur olarak ayarlama özelliklerini içerir. Kullanılabilir özellikler şunlardır:

  • variable = değişken adı (Gerekli)
  • issecret = boole değeri (İsteğe bağlı, varsayılan değer false'tur)
  • isoutput = boole değeri (İsteğe bağlı, varsayılan değer false'tur)
  • isreadonly = boole değeri (İsteğe bağlı, varsayılan değer false'tur)

Bir sonraki aşamada değişkenini kullanmak için özelliğini olarak trueayarlayınisoutput. True olarak ayarlanmış bir değişkene isoutput başvurmak için görev adını ekleyeceksiniz. Örneğin, $(TaskName.myVar).

Bir değişkeni salt okunur olarak ayarladığınızda, aşağı akış görevleri tarafından değişkenin üzerine yazılamaz. isreadonly seçeneğini true olarak ayarlayın. Değişkeni salt okunur olarak ayarlamak, bu değişkeni sabit hale getirerek güvenliği artırır.

Değişkeni gizli dizi olarak ayarlama

issecret true olarak ayarlandığında değişkenin değeri gizli dizi olarak kaydedilir ve günlüklerden maskelenir.

Not

Azure Pipelines, işlem hattı günlüklerine veri gönderirken gizli dizileri maskelemeye çaba gösterir, bu nedenle çıkışta ve günlüklerde gizli dizi olarak ayarlanmamış ek değişkenleri ve verileri maskelenmiş olarak görebilirsiniz.

gizli dizi değişkenini mySecretValayarlayın.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"

gizli dizi değişkenini mySecretValalın.

- bash: |
    echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
    echo $(mySecretVal)

Bash'te gizli değişken çıkışı.

Bash değişkeni çıkışının ekran görüntüsü.

Çıkış değişkenlerinin düzeyleri

Ayrı söz dizimlerine sahip dört farklı çıkış değişkeni türü vardır:

  • Parametresi olmadan isoutput aynı işte ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için makro söz dizimi kullanacaksınız. Örnek: $(myVar).
  • Parametresiyle isoutputaynı işte ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için görev adını ekleyeceksiniz. Örnek: $(myTask.myVar).
  • Gelecekteki bir işte ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için söz dizimi içeren dependency bölümdeki değişkene variables başvuracaksınız.
  • Gelecek aşamalarda ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için söz dizimi içeren stageDependencies bölümdeki değişkene variables başvuracaksınız.

Aynı işte kullanılacak bir çıkış değişkeni ayarlama

Aynı işte bir çıkış değişkeni kullandığınızda özelliğini kullanmanız isoutput gerekmez. Varsayılan olarak, değişken aynı iş içindeki aşağı akış adımlarını kullanabilir. Ancak, özelliğini eklerseniz isoutput , görev adıyla değişkene başvurmanız gerekir.

Buradaki betik, belirtmeden aynı iş çıkış değişkenini myJobVar ayarlar ve ile isoutput=trueayarlarmyOutputJobVar.isoutput

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

Bu betik ile aynı iş değişkenlerini myJobVarmyOutputJobVaralır. Bir çıktı değişkenine başvurmak için söz diziminin eklendikten sonra isoutput=true değiştiğine dikkat edin.

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)

Gelecek işlerde kullanmak üzere bir çıkış değişkeni ayarlama

İşler arasında çıkış değişkenlerini kullandığınızda, ile dependenciesbunlara başvuracaksınız. Gelecekteki bir iş veya aşamada bir çıkış değişkenine erişmek için söz dizimi, değişkenin ayarlayıcısı ve tüketicisi arasındaki ilişkiye göre değişir. Bağımlılıklardaki her durum hakkında bilgi edinin.

İlk olarak çıkış değişkenini myOutputVarayarlayın.

jobs:
- job: A
  steps:
  - bash: |
     echo "##vso[task.setvariable variable=myOutputVar;isoutput=true]this is from job A"
    name: passOutput

Ardından, gelecekteki bir işe erişin myOutputVar ve değişkenini olarak myVarFromJobAçıktısını verin. kullanmak dependenciesiçin, çıkış değişkeninin dependsOn ayarlandığı geçmiş işin adını kullanarak gelecekteki işte özelliğini ayarlamanız gerekir.

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)

Sonraki aşamalarda kullanmak üzere bir çıkış değişkeni ayarlama

Çıkış değişkenleri işlem hatlarındaki aşamalar arasında kullanılabilir. Oluşturulan çıktının kimliği gibi yararlı bilgileri bir aşamadan diğerine geçirmek için çıkış değişkenlerini kullanabilirsiniz.

özelliğiyle isoutput bir değişken ayarladığınızda, bu değişkene görev adı ve stageDependencies söz dizimi ile sonraki aşamalarda başvurabilirsiniz. Bağımlılıklar hakkında daha fazla bilgi edinin.

Çıkış değişkenleri yalnızca sonraki aşağı akış aşamasında kullanılabilir. Birden çok aşama aynı çıkış değişkenini kullanıyorsa koşulunu dependsOn kullanın.

İlk olarak çıkış değişkenini myStageValayarlayın.

steps:
  - bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
    name: MyOutputVar

Daha sonra, sonraki bir aşamada çıkış değişkenini myStageVal bir aşama, iş veya görev kapsamlı değişkenle (örneğin myStageAVar, ) eşleyin. Eşleme söz diziminin bir çalışma zamanı ifadesi $[] kullandığına ve değişkeni tam olarak nitelemek için hem aşama adını (A) hem de iş adını (A1) kullanarak çıkış değişkenine giden yolu stageDependencies izlediğine dikkat edin.

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)

Değerinizin yeni satırlar içermesi durumunda, bunlardan kaçabilirsiniz ve aracı otomatik olarak bu satırdan çıkarılır:

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

SSS

Çıkış değişkenim işlenmiyor. Sorun nedir?

Çıkış değişkeninizin görünmeyebilir olmasının birkaç nedeni vardır.

  • ile isoutput ayarlanan çıkış değişkenleri aynı işte kullanılamaz ve bunun yerine yalnızca aşağı akış işlerinde kullanılabilir.
  • Kullandığınız değişken söz dizimine bağlı olarak, bir çıkış değişkeninin değerini ayarlayan bir değişken çalışma zamanında kullanılamayabilir. Örneğin, makro söz dizimi ($(var)) içeren değişkenler, görev çalışmadan önce işlenir. Buna karşılık, şablon söz dizimine sahip değişkenler çalışma zamanında ($[variables.var]) işlenir. Çıkış değişkenlerini ayarlarken genellikle çalışma zamanı söz dizimlerini kullanmak istersiniz. Değişken söz dizimi hakkında daha fazla bilgi için bkz . Değişkenleri tanımlama.
  • İfadenizde fazladan boşluklar olabilir. Değişkeniniz işlenmiyorsa, çevresinde isOutput=truefazladan boşluk olup olmadığını denetleyin.

Bağımlılıklar için bir değişken ekleyerek ve ardından bu değişkeni yazdırarak işlem hattı işinin veya aşamanın çıktı sorunlarını giderebilirsiniz dependencies . Örneğin, bu işlem hattı işinde A çıkış değişkenini MyTaskayarlar. İkinci iş (B) işe Abağlıdır. Yeni bir değişken, deps iş bağımlılıklarının JSON gösterimini tutar. İş'teki B ikinci adım, iş bağımlılıklarını görebilmeniz için çıktıyı yazdırmak deps için PowerShell'i kullanır.

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)"