Azure devops 如果yaml中的前一阶段部署条件设置为false,则阻止部署

Azure devops 如果yaml中的前一阶段部署条件设置为false,则阻止部署,azure-devops,yaml,azure-pipelines,azure-pipelines-release-pipeline,Azure Devops,Yaml,Azure Pipelines,Azure Pipelines Release Pipeline,我使用yaml创建了一个构建/发布管道: 在这里,第一个阶段是“构建”。一旦构建完成并成功,下一阶段是“部署到ua”。如果部署到ua已完成并成功,则下一阶段是“部署到产品” 如图所示,“部署到ua”的条件返回“false”。如果“部署到ua”的条件为false,我如何跳过部署到prod 当我在部署到ua的阶段中设置作业的条件时,我再现了上述场景。作业“部署资源Ip”将被跳过,因为条件为false。但已成功评估阶段部署到ua。下一阶段将继续运行 解决此问题的方法是在阶段级别而不是作业级别上设置。

我使用yaml创建了一个构建/发布管道:

在这里,第一个阶段是“构建”。一旦构建完成并成功,下一阶段是“部署到ua”。如果部署到ua已完成并成功,则下一阶段是“部署到产品”

如图所示,“部署到ua”的条件返回“false”。如果“部署到ua”的条件为false,我如何跳过部署到prod


当我在部署到ua的阶段
中设置作业的条件时,我再现了上述场景。作业“部署资源Ip”将被跳过,因为条件为false。但已成功评估阶段
部署到ua
。下一阶段将继续运行

解决此问题的方法是在阶段级别而不是作业级别上设置。例如:

阶段发布B依赖于版本A,当阶段发布A未成功时,将跳过阶段发布B(/skipped)。当条件为false时,将跳过阶段发布A(而不是在作业级别上设置条件时跳过作业B)

stages: 
- stage: Build
  jobs:
  - job: A
    steps:
      - powershell: echo "Stage A"

- stage: Release_A
  dependsOn: Build
  condition: and(succeeded('Build'), eq(variables['build.sourceBranch'], 'refs/heads/master'))
  jobs:
  - job: B
    steps:
      - powershell: echo "Stage B"

- stage: Release_B
  dependsOn: Release_A
  condition: succeeded('Release_A')
  jobs:
  - job: C
    steps:
      - powershell: echo "Stage C"
但是,如果要在作业级别上设置条件,则需要在阶段
部署到ua
中添加另一个作业,以便在条件为false时故意使自身失败(以便阶段将被评估为失败)

stages: 
- stage: Build
  jobs:
  - job: A
    steps:
      - powershell: echo "Stage A"

- stage: Release_A
  dependsOn: Build
  condition: and(succeeded('Build'), eq(variables['build.sourceBranch'], 'refs/heads/master'))
  jobs:
  - job: B
    steps:
      - powershell: echo "Stage B"

- stage: Release_B
  dependsOn: Release_A
  condition: succeeded('Release_A')
  jobs:
  - job: C
    steps:
      - powershell: echo "Stage C"

希望以上帮助!

如果条件为
false
则该阶段将失败而不是跳过,您是否知道?正确。如果上一次部署中的条件为false,则跳过下一次部署。