【问题标题】:Azure Pipelines: How to make a task dependent on a previous task?Azure Pipelines:如何使任务依赖于先前的任务?
【发布时间】:2020-06-17 19:03:05
【问题描述】:

我在 windows-2019 上使用 Azure-Pipelines 进行 CI 集成。这是一个场景,任务 # 的平均发生顺序(1 是第一个)。

在任务 2 中,我正在运行测试。在任务 3 中,我想生成有关这些测试的报告,无论测试是成功还是失败(因此将 - condition: succeededOrFailed() 添加到任务 3)。

但是,在任务 1 中,我正在构建存储库。如果构建失败,我不希望任何后续任务运行。但由于任务 3 有condition: succeededOrFailed(),它仍然运行并产生另一个错误。我的目标是让任务 3 无论任务 2 失败还是成功都运行,但如果任务 1 失败则不是。

我不确定处理此问题的最佳方法。是否可以使任务 3 依赖于任务 2?或者如果任务 1 失败,我可以立即停止整个管道吗?

另外,对于任务 1,我尝试了 continueOnError: false,因为我认为它会在那里停止管道,但它并没有按照我的想法做。任何帮助将不胜感激!

【问题讨论】:

  • 嗨@lakers5824。这个问题有更新吗?如果我的回答能给你一些帮助,请随时告诉我。只是提醒this
  • 正在测试中,会尽快更新,感谢回复!

标签: windows testing azure-devops continuous-integration azure-pipelines


【解决方案1】:

我的目标是让任务 3 运行,无论任务 2 失败还是成功,但不是任务 1 失败。

根据您的要求,您可以连接任务 3 和任务 1。

这是 Yaml 模板:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: task1
...


- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      # Write your PowerShell commands here.

      Write-Host "##vso[task.setvariable variable=task.A.status]Success"      
  condition: succeeded()

- task: task2
 ...
  condition: succeeded()

- task: task 3
....
  condition: and (succeededOrFailed(), eq(variables['task.A.status'], 'success'))

说明:

Powershell task 用于为任务 1 设置 output variable。当任务 1 成功时,变量将设置值 success。此变量可用于以下任务。

任务 2 中的条件取决于任务 1。

任务3中的条件需要同时满足两个条件。 (1.不管成功还是失败,2.自定义变量值为success)。

那么只有在任务 1 成功时任务 3 才会运行。无论任务 2 失败还是成功,任务 3 都会运行。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2011-04-05
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多