You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps中使用Bash任务时检测构建取消状态的方法

在Azure DevOps Bash脚本中检测构建取消并终止循环

要解决这个问题,你可以利用Azure DevOps的内置环境变量或者捕获系统信号来检测构建是否被取消,从而提前终止循环。以下是两种可行的实现方式:

方法1:检查Azure DevOps内置环境变量

当构建或作业被手动取消时,Azure DevOps会自动将环境变量AGENT_JOBSTATUS设置为Canceled。你可以在循环内直接检查这个变量的值,判断是否需要跳出循环。

修改后的完整循环代码:

total_iterations=600  # 对应10分钟(每秒检查一次)
counter=0

while [ $counter -lt $total_iterations ]; do
    ((counter++))
    sleep 1  # 按需调整检查间隔

    # 检测构建是否被取消
    if [ "$AGENT_JOBSTATUS" = "Canceled" ]; then
        echo "构建已取消,终止等待循环"
        break
    fi

    # 在这里添加你的作业成功检查逻辑
    # 示例:if [ "$(curl -s http://your-status-api)" = "success" ]; then
    #         echo "作业执行成功,终止循环"
    #         break
    #     fi
done

方法2:捕获SIGTERM信号

手动取消构建时,Azure DevOps会向运行的Bash脚本发送SIGTERM终止信号。你可以在脚本开头添加信号捕获逻辑,设置一个标记变量,然后在循环内检查该标记。

这种方式响应更快,能避免环境变量更新延迟的问题:

# 初始化取消标记,并捕获SIGTERM信号设置标记
canceled=false
trap 'canceled=true' SIGTERM

total_iterations=600
counter=0

while [ $counter -lt $total_iterations ] && [ "$canceled" = false ]; do
    ((counter++))
    sleep 1

    # 检查是否收到终止信号
    if [ "$canceled" = true ]; then
        echo "捕获到终止信号,终止等待循环"
        break
    fi

    # 在这里添加你的作业成功检查逻辑
done

注意事项

  • 两种方法可以结合使用,进一步提升可靠性
  • 调整sleep的时长和total_iterations的值,匹配你的实际等待需求
  • 确保脚本在Azure DevOps代理环境中运行,这样才能正确获取到AGENT_JOBSTATUS变量

内容的提问来源于stack exchange,提问作者Michele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:42:45