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.setvariable
bir 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 isoutput
eklerseniz, 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 foo
ayarlayın.
- bash: |
echo "##vso[task.setvariable variable=myVar;]foo"
değişkenini myVar
okuyun:
- 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 true
ayarlayı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 mySecretVal
ayarlayın.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
gizli dizi değişkenini mySecretVal
alın.
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
Bash'te gizli değişken çıkışı.
Çı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
isoutput
aynı 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şkenevariables
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şkenevariables
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=true
ayarlarmyOutputJobVar
.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 myJobVar
myOutputJobVar
alı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 dependencies
bunlara 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 myOutputVar
ayarlayı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 dependencies
iç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 myStageVal
ayarlayı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=true
fazladan 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 MyTask
ayarlar. İkinci iş (B
) işe A
bağ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)"