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'