在Azure DevOps中,同一作业中的任务可以相互依赖吗?

时间:2019-08-15 09:26:17

标签: azure azure-devops azure-pipelines

我在Azure DevOps中的发布管道有一个工作。这项工作有3个任务:A,B,C。 我需要进行设置,以便B和C仅在A成功时运行,但是如果A成功并且B失败,则C仍然运行。

我似乎无法找出实现该目标的正确条件。根据{{​​3}},您可以使Task依赖于另一个Job的状态,但是看起来Task不可能依赖于另一个Task。

2 个答案:

答案 0 :(得分:2)

默认情况下,每个任务仅在上一个任务成功时才执行,因此任务B仅在A成功时才执行。

您希望即使任务B失败,任务C也会被执行,因此请将此条件添加到任务B:

continueOnError: true 

如果任务B失败,现在将执行任务C,但是如果任务A失败,则将跳过任务B和C。

例如3个PowerShell任务:

- powershell: 'Write-Host "A"'
  displayName: A

- powershell: 'Write-Host "B"'
  displayName: B
  continueOnError: true

- powershell: 'Write-Host "C"'
  displayName: C

在上述行为中,构建将为橙色(部分成功),并且如果您在C之后还有其他任务,它们也将被执行,如果您希望任务B将变为红色并且仅运行任务C之后,这样做并不容易,请查看this的问题和答案。

答案 1 :(得分:1)

您可以使用每个任务的控制选项来实现:

enter image description here

任务A:

floorShader->use();
floorShader->setMat4("projection", projection);
floorShader->setMat4("view", view);
floorShader->setVec3("viewPos", camera.Position);
floorShader->setMat4("lightSpaceMatrix", lightSpaceMatrix);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, DepthMap->depthMapTexture);
ourFloor->draw(floorShader);

任务B:

[ ] continue on error

任务C:

[x] continue on error

希望这会有所帮助