Koşulları belirtin
Azure Pipelines | TFS 2018 | TFS 2017,3
Her bir aşamanın, işin veya adımın çalıştırıldığı koşulları belirtebilirsiniz. Varsayılan olarak, bir iş veya aşama başka bir işe veya aşamaya bağlı değilse veya bağımlı olduğu tüm işler ya da aşamalar tamamlandıysa ve başarılı olursa çalışır. Varsayılan olarak, bir adım, işinde hiçbir şey başarısız olduysa ve bu adım tamamlandıktan hemen önce çalıştırıldığında çalışır. Önceki bir bağımlılık başarısız olsa da veya özel bir koşul belirterek, bir aşamayı, işi veya adımı çalıştırmaya zorlayarak, bu davranışı özelleştirebilirsiniz.
Not
Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatlarıtanımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.
Bir adım, iş veya aşamanın çalıştırılacağı koşulları belirtebilirsiniz.
Yalnızca aynı aracı havuzuna sahip tüm önceki bağımlılıklar başarılı olduğunda. Farklı aracı havuzlarınız varsa, bu aşamalar veya işler eşzamanlı olarak çalışır. YAML 'de bir koşul ayarlanmamışsa bu varsayılandır.
Önceki bağımlılık başarısız olsa bile, çalıştırma iptal edilmediği takdirde.
succeededOrFailed()Bu koşul IÇIN YAML 'de kullanın.Önceki bağımlılık başarısız olsa bile, çalıştırma iptal edilse bile.
always()Bu koşul IÇIN YAML 'de kullanın.Yalnızca önceki bir bağımlılık başarısız olduğunda.
failed()Bu koşul IÇIN YAML 'de kullanın.
- Özel koşullar
Varsayılan olarak, adımlar, işler ve aşamalar, önceki tüm adımlar/işler başarılı olursa çalışır. "Koşul: başarılı ()" (bkz. iş durumu işlevleri) belirttiniz.
jobs:
- job: Foo
steps:
- script: echo Hello!
condition: always() # this step will always run, even if the pipeline is canceled
- job: Bar
dependsOn: Foo
condition: failed() # this job will only run if Foo fails
Ayrıca, koşullarda değişkenleri kullanabilirsiniz.
variables:
isMain: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')]
stages:
- stage: A
jobs:
- job: A1
steps:
- script: echo Hello Stage A!
- stage: B
condition: and(succeeded(), eq(variables.isMain, 'true'))
jobs:
- job: B1
steps:
- script: echo Hello Stage B!
- script: echo $(isMain)
Koşullar, bir aşama, iş veya adım başlatılıp başlatılmayacağını belirlemek için değerlendirilir.
Bu, çalışma birimi içindeki çalışma zamanında hesaplanmayan hiçbir şeyin kullanılabilir olacağı anlamına gelir.
Örneğin, sözdizimi kullanarak bir çalışma zamanı ifadesi kullanarak bir değişken ayarlayan bir işiniz varsa $[ ] , bu değişkeni özel koşulunuz içinde kullanamazsınız.
YAML henüz TFS 'de desteklenmiyor.
Özel bir koşulu etkinleştir
Yerleşik koşullar gereksinimlerinizi karşılamıyorsa, özel koşullarbelirtebilirsiniz.
TFS 2017,3 ' de, özel görev koşulları yalnızca derleme işlem hatları için Kullanıcı arabiriminde kullanılabilir. Yayın işlem hatlarına özel koşullar oluşturmak için REST API 'Lerini serbest bırakma ' yı kullanabilirsiniz.
Koşullar, YAML işlem hatları içinde ifadeler olarak yazılmıştır. Aracı, ifadeyi en içteki işlevle başlayarak değerlendirir ve bunun şekilde çalışır. Nihai sonuç, görevin, işin veya aşamanın çalıştırılacağını veya çalıştırılmadığını belirleyen bir Boole değeridir. Sözdizimine tam kılavuz için bkz. ifadeler konusu.
Koşullarınız, oluşturma kullanıcı tarafından iptal edildikten sonra bile görevin çalışmasını mümkün hale getirir mi? Bu durumda, bu tür görevlerin Kullanıcı bir çalıştırmayı iptal ettikten sonra tamamlanmak üzere yeterli süre olması için, iptal zaman aşımı için makul bir değer belirtin.
Örnekler
Başarılı olursa ana dal için Çalıştır
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
Eğer başarılı olursa dal ana değilse Çalıştır
and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/main'))
Başarılı olursa Kullanıcı konu dalları için Çalıştır
and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/users/'))
Başarılı olursa sürekli tümleştirme (CI) derlemeleri için Çalıştır
and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
Oluşturma işlemi başarısız olursa, bir çekme isteği için yapı bir dal ilkesi tarafından çalıştırıldığında Çalıştır
and(failed(), eq(variables['Build.Reason'], 'PullRequest'))
Derleme zamanlanırsa bile başarısız olsa bile Çalıştır
and(always(), eq(variables['Build.Reason'], 'Schedule'))
Yayın. Artifacts. {yapıt-Alias}. SourceBranch , Build. sourcebranchile eşdeğerdir.
Bir değişken true olarak ayarlandıysa Çalıştır
condition: eq(variables['System.debug'], 'true')
Bir değişken null ise Çalıştır (boş dize)
tüm değişkenler Azure Pipelines dize olarak değerlendirildiğinden, bu işlem hattının boş bir dizesi eşdeğerdir null .
variables:
- name: testEmpty
value: ''
jobs:
- job: A
steps:
- script: echo testEmpty is blank
condition: eq(variables.testEmpty, '')
Bir koşulun parçası olarak şablon parametresini kullanma
Bir koşulunuz olan aynı işlem hattında bir parametre bildirdiğinizde, koşulların değerlendirilmesinden önce parametre genişletmesi olur. Bu durumda, koşulların içine parametreler ekleyebilirsiniz. Bu YAML dosyasındaki betik, doğru olduğundan çalışacak parameters.doThing .
parameters:
- name: doThing
default: true
type: boolean
steps:
- script: echo I did a thing
condition: and(succeeded(), eq('${{ parameters.doThing }}', 'true'))
Ancak, bir parametreyi bir şablona geçirdiğinizde, koşul değerlendirildiğinde parametre bir değere sahip olmayacaktır. Sonuç olarak, parametre değerini hem şablonda hem de işlem hattı YAML dosyalarında ayarlarsanız, şablondaki değer koşulınızda kullanılacaktır.
# parameters.yml
parameters:
- name: doThing
default: false # value passed to the condition
type: boolean
jobs:
- job: B
steps:
- script: echo I did a thing
condition: and(succeeded(), eq('${{ parameters.doThing }}', 'true'))
# azure-pipeline.yml
parameters:
- name: doThing
default: true # will not be evaluated in time
type: boolean
trigger:
- none
extends:
template: parameters.yml
Sonraki işteki bir koşuldaki bir işten çıkış değişkenini kullanma
Bir değişkeni gelecekteki işler için kullanılabilir hale getirebilirsiniz ve bunu bir koşula göre belirtebilirsiniz. Gelecekteki işlerin kullanabildiği değişkenler kullanılarak çok iş çıkış değişkenleri olarak işaretlenmelidir .
jobs:
- job: Foo
steps:
- bash: |
echo "This is job Foo."
echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #set variable doThing to Yes
name: DetermineResult
- job: Bar
dependsOn: Foo
condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check the value
steps:
- script: echo "Job Foo ran and doThing is Yes."
SSS
Bir iş iptal edildiğinde bile çalışan koşullu bir adım aldım. Koşullu adımım, kuyrukta iptal ediyorum bir işi etkilsin mi?
Hayır. Kuyruktaki bir işi iptal ederseniz, koşullu adımlar da dahil olmak üzere tüm iş iptal edilir.
Dağıtım iptal edildiğinde bile çalışması gereken koşullu bir adım aldım. Bunu belirtmek Nasıl yaparım? mı?
Bir YAML dosyası kullanarak işlem hatlarını tanımladıysanız, bu desteklenir. Bu senaryo, yayın işlem hatları için henüz desteklenmiyor.
Önceki bir iş sorunlarla birlikte başarılı olursa bir işi nasıl tetikleyebilirim?
Önceki işin sonucunu kullanabilirsiniz. Örneğin, bu YAML dosyasında, eq(dependencies.A.result,'SucceededWithIssues') Iş bir sorun ile başarılı olduğu için işin çalışmasına izin verir.
jobs:
- job: A
displayName: Job A
continueOnError: true # next job starts even if this one fails
steps:
- script: echo Job A ran
- script: exit 1
- job: B
dependsOn: A
condition: eq(dependencies.A.result,'SucceededWithIssues') # targets the result of the previous job
displayName: Job B
steps:
- script: echo Job B ran
Bir iş iptal edildiğinde bile çalışan koşullu bir adım aldım. Tek seferde tüm işleri iptal etmek için Nasıl yaparım?.
Aşamada yapılandırılan koşul bir iş durumu denetimi işlevi içermiyorsa, bu sorunla karşılaşırsınız. Sorunu çözmek için, koşula bir iş durumu denetim işlevi ekleyin. Kuyruktaki bir işi iptal ederseniz, bu işlevle birlikte tüm diğer aşamalar da dahil olmak üzere tüm işler iptal edilir. Daha fazla bilgi için bkz. iş durumu işlevleri.
stages:
- stage: Stage1
displayName: Stage 1
dependsOn: []
condition: and(contains(variables['build.sourceBranch'], 'refs/heads/main'), succeeded())
jobs:
- job: ShowVariables
displayName: Show variables
steps:
- task: CmdLine@2
displayName: Show variables
inputs:
script: 'printenv'
- stage: Stage2
displayName: stage 2
dependsOn: Stage1
condition: contains(variables['build.sourceBranch'], 'refs/heads/main')
jobs:
- job: ShowVariables
displayName: Show variables 2
steps:
- task: CmdLine@2
displayName: Show variables 2
inputs:
script: 'printenv'
- stage: Stage3
displayName: stage 3
dependsOn: Stage2
condition: and(contains(variables['build.sourceBranch'], 'refs/heads/main'), succeeded())
jobs:
- job: ShowVariables
displayName: Show variables 3
steps:
- task: CmdLine@2
displayName: Show variables 3
inputs:
script: 'printenv'
İlgili makaleler:
- İşlem hattınızda işleri belirtme
- Aşamalar, bağımlılıklar, koşullar ekleme