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.

Komut dosyaları, bir görev tarafından desteklenmeyen bir şey yapmak istediğinizde harikadır. Örneğin, özel REST API'yi çağırmak ve yanıtı ayrıştırmak için bir betik kullanabilirsiniz.

task.setvariable günlüğe kaydetme komutunu, PowerShell ve Bash betiklerinde değişkenleri ayarlamak için kullanırsınız.

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. Daha fazla bilgi için bkz. Aynı işte kullanılmak üzere 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 isOutputayarlayıntrue. isOutput true olarak ayarlanmış bir değişkene başvurmak için görev adını eklersiniz. Örneğin, $(TaskName.myVar).

Bir değişkeni salt okunur olarak ayarladığınızda, aşağı akış görevleri değişkenin üzerine yazamaz. 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:

  • isOutput olmadan aynı işte ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için makro söz dizimi kullanırsı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ı eklersiniz. Örnek: $(myTask.myVar).
  • Gelecekteki bir işte ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için, variables bölümündeki değişkene dependency söz dizimi ile başvurursunuz.
  • Gelecek aşamalarda ayarlanan çıkış değişkenleri. Bu değişkenlere başvurmak için, variables bölümündeki değişkene stageDependencies söz dizimi ile başvurursunuz.

Not

Gelecekteki aşamalar veya işler yalnızca değişkenin ayarlandığı aşamaya veya işe bağlıysa çıkış değişkenlerine erişebilir. Bir çıkış değişkeninin erişilebilir olmasını sağlamak için, bir sonraki aşamanın veya işin değişkeni oluşturduğunuz aşamaya veya işe bağlı olduğundan emin olun. Birden çok aşama veya işin aynı çıkış değişkenini kullanması gerekiyorsa, bu bağımlılığı oluşturmak için koşulunu dependsOn kullanın.

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şkeni aynı iş içindeki aşağı akış adımları için kullanılabilir. Ancak, isOutput özelliğini eklerseniz, değişkenine görev adıyla başvurmanız gerekir.

Buradaki betik, belirtmeden aynı iş çıkış değişkenini myJobVar ayarlar ve ile isOutputayarlarmyOutputJobVar.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

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, bunlara dependenciesile başvurursunuz. 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ı (stageDependencies) hem de iş adını (A) kullanarak çıkış değişkenine giden yolu A1 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ı bunu otomatik olarak kaldırabilir:

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.
  • İfadenizin içinde 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. İş B'deki ikinci adım, iş bağımlılıklarını görebilmeniz için deps yazdırmak 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)"