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
相关产品推荐
相关产品推荐

