【问题标题】:Skip taskB taskC when task A is failed even though conditions of taskB & taskC are met即使满足任务 B 和任务 C 的条件,当任务 A 失败时跳过任务 B 任务 C
【发布时间】:2022-12-01 11:14:43
【问题描述】:

Q1:我在 ADO YAML 管道中有一个作业,其中有 4-5 个任务在执行。我想根据一些条件触发这些任务,所以我使用了 ADO 表达式。但是现在我想在 taskA 失败时跳过 taskB。默认情况下它应该发生但似乎我的任务条件覆盖了 continueonerror:false

你能建议怎么做吗? 尝试了替代解决方法:在 1 个作业中设置 1 个任务的 Multi Job Pipeline setup & 它对我们来说工作正常,但想知道我们如何在单个作业中设置多个任务?

Q2:即使我可以使用 REST API 将 taskA 状态作为变量并设置变量概念,我如何在任务中添加多个条件。类似于“ variable1=succeeded & variable2 = p1 or variable3 = p2 ”

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops

示例 yaml

parameters:

variables:

trigger:

steps:
  task: A
  continueonerror:false
condition: or(eq(v1, p3), eq(v2, 3), eq(v4, 5))

  task: B
  continueonerror:false
condition: or(eq(v1, p1), eq(v2, 6))

  task: C
  continueonerror:false
condition: or(eq(v1, p2), eq(v2, 8))

【问题讨论】:

  • 可以肯定的是,您提到了 ADO。我的假设是您指的是 AzDo (Azure DevOps) 对吗?

标签: azure-devops azure-pipelines devops azure-devops-rest-api azure-pipelines-yaml


【解决方案1】:

根据您对如果TaskA 失败则跳过TaskB 的期望,您可以考虑将succeeded() 作为TaskB 条件的一部分连同您的其他评估一起添加。请参考以下示例 YAML。

trigger: none
parameters:
- name: p1
  default: 1
- name: p2
  default: 2
- name: p3
  default: 3
variables:
  v1: 2
  v2: 6
  v3: 2
  v4: 5

steps:
- script: |
    echo A
    echo "##vso[task.logissue type=error]Simulate task failure."
    exit 1
  name: TaskA
# continueOnError: true
  condition: or(eq(variables['v1'], ${{ parameters.p3 }}), eq(variables['v2'], 3), eq(variables['v4'], 5))
- script: echo B
  name: TaskB
  condition: and(succeeded(), or(eq(variables['v1'], ${{ parameters.p1 }}), eq(variables['v2'], 6)))
- script: echo C
  name: TaskC
  condition: and(succeededOrFailed(), or(eq(variables['v1'], ${{ parameters.p2 }}), eq(${{ parameters.p2 }}, 8)))

TaskA失败时,succeeded()TaskB的条件评估将是False;因此TaskB被跳过。

TaskC 在其条件中使用 succeededOrFailed() 并将继续运行,即使先前的依赖项失败,除非运行被取消。

Specify conditions 上查看更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多