首页 > 解决方案 > Azure Pipeline 在运行被取消或成功时执行清理工作

问题描述

我有一个管道,它将在我创建 PR 时运行。管道运行将触发外部服务的一些工作。我在管道的末端有一个清理阶段来清理部署在外部服务上的东西。我只想要成功时的清理工作。当它失败时,我不想做任何清理,所以我可以查看错误日志。当管道成功时,清理工作正常工作。

现在我发现当我向我的特性分支推送一个新的提交时,之前的运行将被自动取消并开始新的运行。这是有道理的。但由于管道不成功,它不会进行清理。但我希望在取消管道时也进行清理。

从文档中,我找到了一个预定义的变量:Agent.JobStatus,它是构建的状态。好像是我要找的东西。但经过测试,它似乎不起作用。我像这样更改了工作代码,但它不起作用:

  - stage: Cleanup
    condition: always()
    dependsOn:
      - execution_stage
    variables:
      ExecutionSucceed: $[ stageDependencies.execution_stage.execution_job.outputs['execution_task.succeed'] ]
    jobs:
      - job: ...
        steps:
          - bash: |
              echo "Job status is $(Agent.JobStatus)"
              if [[ "$(ExecutionSucceed)" == 'True' || "$(Agent.JobStatus)" == "Canceled" ]]
              then
                # Do all the clean-up works
              fi

输出显示:作业状态为成功

有人可以帮我理解为什么它成功了,我怎么知道管道运行被取消了?谢谢

标签: azure-devopsazure-pipelines

解决方案


作为一种解决方法,您可以设置以下条件:

stages:
- stage: A
  jobs:
  - job: A1
    steps:
    - script: echo Job A1
- stage: Cleanup
  condition: in(dependencies.A.result, 'Succeeded', 'Canceled')
  jobs:
  - job: B1
    steps:
    - script: echo Job B1

您可以参考Stage to stage dependencies文档中的部分。


推荐阅读