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

Azure DevOps中如何按特定失败输出条件配置任务重试

Azure DevOps流水线条件重试实现方案

由于retryCountOnTaskFailure不支持条件判断,要实现仅当输出包含指定字符串时重试,需要通过自定义脚本逻辑+作业级条件重试来实现,具体配置如下:

job: my_job
variables:
  retryMaxCount: 1  # 最大重试次数
  currentRetryCount: $[counter('my_job_retry', 0)]  # 记录当前重试次数
condition: or(eq(variables['currentRetryCount'], 0), eq(variables['shouldRetry'], 'true'))
steps:
  # 第一步:执行cmake并捕获输出,允许任务失败
  - powershell: |
      # 执行cmake并将输出保存到文件
      cmake . 2>&1 | Tee-Object -FilePath $(Build.ArtifactStagingDirectory)/cmake_output.txt
      # 检查输出是否包含目标错误字符串
      $output = Get-Content $(Build.ArtifactStagingDirectory)/cmake_output.txt -Raw
      if ($output -match "The build has failed.") {
        # 设置需要重试的变量
        Write-Host "##vso[task.setvariable variable=shouldRetry;isOutput=true]true"
        # 抛出错误让流水线进入重试判断流程
        exit 1
      }
    name: cmakeStep
    continueOnError: true

  # 第二步:判断是否需要重试,控制作业重试逻辑
  - powershell: |
      # 检查当前重试次数是否已达上限
      if ($(currentRetryCount) -lt $(retryMaxCount)) {
        Write-Host "检测到目标错误,触发重试(当前重试次数:$(currentRetryCount))"
        Write-Host "##vso[task.setvariable variable=shouldRetry;isOutput=true]true"
      } else {
        Write-Host "重试次数已达上限,终止流水线"
        Write-Host "##vso[task.setvariable variable=shouldRetry;isOutput=true]false"
        exit 1
      }
    condition: and(failed(), eq(variables['cmakeStep.shouldRetry'], 'true'))
    name: retryCheck

配置说明:

  • 变量部分:retryMaxCount设置最大重试次数,currentRetryCount用counter函数记录重试次数,每次作业运行时自动递增。
  • 作业条件:只有首次运行(重试次数为0)或者shouldRetry为true时,作业才会执行。
  • cmake步骤:执行命令并捕获输出到文件,检查是否包含目标错误字符串,若是则设置shouldRetry变量并抛出错误,同时开启continueOnError: true确保流水线不会直接终止。
  • 重试检查步骤:仅在cmake步骤失败且shouldRetry为true时执行,判断当前重试次数是否未达上限,若是则保留shouldRetry为true触发重试,否则终止流水线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:43:18