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.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. Daha fazla bilgi için bkz. Aynı işte kullanılmak üzere 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 isOutput
ayarlayı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 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:
-
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
isOutput
aynı 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şkenedependency
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şkenestageDependencies
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 isOutput
ayarlarmyOutputJobVar
.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 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, bunlara dependencies
ile 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 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ı (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=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. İş 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)"