仅在特定的先前作业失败后才有条件地运行Azure DevOps作业

时间:2020-06-09 09:34:58

标签: azure-devops conditional-statements azure-pipelines-release-pipeline

在Azure DevOps中,我试图做到这一点,以便仅在特定的先前作业失败时才运行发布作业(而不是YAML管道作业)。运行作业的预定义条件之一是“仅当先前的作业失败时”,但这是不合适的,因为它包括所有先前的作业,而不仅仅是最后一个作业(或者更好的是,用户的作业)选择)。

请注意,this question专注于工作中的任务,而不是我要找的答案。

根据documentation中“如果以前的工作成功解决问题如何触发工作?”下的条件,我可以访问上一个工作的结果-

eq(dependencies.A.result,'SucceededWithIssues')

查看先前版本的日志,我要检查的作业的AGENT_JOBNAMEPost Deployment Tests,因此这意味着我的情况应如下所示。但是,Azure DevOps甚至都不会让我保存我的版本-

not(eq(dependencies.Post Deployment Tests.result, 'succeeded'))

阶段“ Dev”中作业“交换插槽在部署后测试失败时返回”的作业条件无效:意外的符号:“部署”。

我尝试将工作名称括在引号中,但出现类似错误-

not(eq(dependencies.'Post Deployment Tests'.result, 'succeeded'))
not(eq(dependencies."Post Deployment Tests".result, 'succeeded'))

我还尝试使用下划线引用我的工作,这确实允许我保存版本,但随后在运行时导致错误-

not(eq(dependencies.Post_Deployment_Tests.result, 'succeeded'))

无法识别的值:“依赖项”。

我如何才能实现仅在特定的先前工作失败后才有条件运行工作的目标?

1 个答案:

答案 0 :(得分:0)

只有在以下情况下,我才能实现有条件地开展工作的目标 以前的特定工作失败了吗?

1。您应该知道Yaml管道和Classic管道使用差异技术。

请参见feature ability,它们具有不同的功能。此外,尽管他们{Yaml,Classic Build,Classic Release)全部支持工作条件,但他们对条件的行为非常不同

Classic(UI)发布管道不支持您尝试的eq(dependencies.'Post Deployment Tests'.result, 'succeeded')。是给Yaml的:

enter image description here

由于版本管道不支持作业依赖性,因此会出现类似Unrecognized value: 'dependencies'之类的错误,这是预期行为。请参见此old ticket