5

我有一个 Azure 多阶段 CI/CD 管道。它具有测试和 UAT 部署阶段。

如果测试成功或被跳过,我希望 UAT 版本运行,但如果失败则不运行。

我不能。无论我尝试什么,如果跳过测试,也会跳过 UAT。除非我使用always(),但即使测试失败,UAT 也会运行。

  ...
  - stage: Test
    condition: and(succeeded(), ne(variables['build.sourceBranchName'], 'DoUAT')) # Skip for UAT deployment tests
    ...

  - stage: UAT
    condition: and(succeeded(), in(variables['build.sourceBranchName'], 'master', 'DoUAT')) # Only deploy off master branch and branch to test UAT deploys.
    ...

如何跳过一个阶段而不是下一个阶段?

我得到的和我想要的

4

3 回答 3

9

您可以使用not(failed('Test'))条件,请尝试以下条件。

- stage: UAT
    condition: and(not(failed('Test')), in(variables['build.sourceBranchName'], 'master', DoUAT')) # Only deploy off master branch and branch to test UAT deploys.
    ...

我测试了它,它工作,检查下面的截图。

在此处输入图像描述

于 2020-02-14T09:06:24.990 回答
3

我正在寻找类似的信息,发现您可以对依赖结果执行“IN”子句。在有关表达式的Microsoft Docs中找到了这个

- job: c
  dependsOn:
  - a
  - b
  condition: |
    and
    (
      in(dependencies.a.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
      in(dependencies.b.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
    )
于 2020-08-15T21:18:29.167 回答
1

我认为这是因为舞台没有运行,它没有获得状态(例如成功、失败、取消等)。没有状态功能skipped

有了这个,我认为您需要在之前的阶段添加一个依赖项,Test以便可以进行此评估。假设那个阶段被称为Build

我认为这种情况应该有效:(换行符仅供阅读)

# run the stage if build is successful 
# and test succeeded or skipped 
# AND the branch is correct
and(
  and(succeeded('Build'), not(failed('Test'))), 
  in(variables['build.sourceBranchName'], 'master', 'DoUAT')
)

失败的

  • 对于一份工作:
    • 没有参数,仅当依赖图中的任何先前作业失败时才评估为 True 。
    • 以作业名称作为参数,仅当其中任何作业失败时才计算为True

由于此文档,我认为有必要添加Test参数以专门针对该阶段。但是,我不确定这是否需要将Test名称添加到舞台dependencies部分。UAT

于 2020-02-14T01:06:33.843 回答