azure-devops - 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
输出显示:作业状态为成功
有人可以帮我理解为什么它成功了,我怎么知道管道运行被取消了?谢谢
解决方案
作为一种解决方法,您可以设置以下条件:
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
本文档中的部分。
推荐阅读
- apache-spark - 使用相同数量的元素压缩 RDD,但会引发“只能压缩每个分区中元素数量相同的 RDD”的错误
- python - 为什么会发生此 ModuleNotFoundError 错误?
- arrays - 如何使用打字稿显示对象数组?
- android-mediacodec - 是否可以通过 HEVC 解码器“libc: Fatal signal 6 (SIGABRT), code -6 in tid 31891 (le.hevc.decoder)”防止崩溃
- excel - VBA Excel宏允许比较2个Excel工作表并复制第三个工作表中的差异?
- bash - 更改某些元素并从同一文件输入而不删除
- python - 使用 id() 命令时,交互式窗口和脚本执行中的 Python 对象识别(缓存)不同?
- javascript - 在资产加载 Vue 应用程序时显示加载屏幕
- scala - GroupBy 与聚合 Spark/Scala 的条件
- python - 使用 pip 安装特定模块