如何在 Azure DevOps 中仅当上一个作业失败时才运行模板作业?

问题描述 投票:0回答:1

这听起来像是一个非常简单的事情,但我已经在互联网上挖掘了几个小时,但找不到可行的示例。

我想要这样的东西:

  - job: A
    displayName: jobA
- ${{ if eq(failed(), true) }}:
  - template: ./template.yaml
    parameters: ...

但它不起作用。我尝试过使用表达式、条件以及中间的作业 B,只是为了将标志传递给表达式 - 仍然不起作用。

如有任何建议,我们将不胜感激。

templates azure-devops azure-pipelines expression
1个回答
0
投票

作业状态检查功能似乎不适用于

if
elseif
else
子句。它们可用于管道中每个阶段、每个作业和每个任务的
condition
键。

另外,为了让模板作业能够得到jobA的最终状态,模板作业应该在jobA之后运行。因此,您需要使用模板作业上的 dependsOn

 键将模板作业设置为依赖于 
jobA

然后在模板作业中,可以使用表达式“

dependencies.A.result
”来获取jobA的状态。此表达式也不适用于
if
elseif
else
子句。

以下为参考范例。

# template.yaml

parameters:
- name: dependsOnJob
  type: string

- name: jobCondition
  type: string

jobs:
- job: TB
  displayName: jobTemplate
  dependsOn: ${{ parameters.dependsOnJob }}
  condition: ${{ parameters.jobCondition }}
  steps:
  . . .
# azure-pipelines.yml

stages:
- stage: S1
  jobs:
  - job: A
    displayName: jobA
    steps:
    . . .
  
  - template: template.yaml
    parameters:
      dependsOnJob: A
      jobCondition: eq(dependencies.A.result, 'failed')


© www.soinside.com 2019 - 2024. All rights reserved.