You need to enable JavaScript to run this app. Azure DevOps Pipelines如何仅在上次运行成功时触发YAML流水线
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Pipelines如何仅在上次运行成功时触发YAML流水线

可行的3种无额外权限配置方案

方案1:直接使用流水线内置的批量触发+独占锁配置(无需额外任务)

  • 首先在你的YAML流水线头部添加batch: true配置,该配置会自动检测同一定义下是否有正在运行的实例,有则不触发新的定时运行
  • 若需要更严格的「上一次必须成功才允许下次运行」规则,可以在流水线关联一个空环境,给环境配置独占锁:
    1. 到ADO项目的「环境」页面新建一个空环境,命名随意比如nightly-build-lock
    2. 给该环境添加「独占锁」检查规则
    3. 在你的YAML流水线的第一阶段添加对该环境的引用:
    stages:
    - stage: PreCheck
      jobs:
      - deployment: LockCheck
        environment: nightly-build-lock
        strategy:
          runOnce:
            deploy:
              steps:
              - script: echo "锁检查通过"
    
    独占锁会确保同一时间只有一个流水线实例能拿到锁运行,且如果上一次运行失败锁不会自动释放,需要手动驳回/批准,刚好符合不允许失败后自动触发新运行的需求。

方案2:用可写入变量组做运行状态标记(仅需流水线权限)

  • 新建一个变量组,命名比如build-status-tracker,添加一个变量lastBuildSucceeded,默认值设为true,勾选「允许在流水线运行时覆盖此值」
  • 流水线首步加一个短任务读取该变量,如果值为false直接终止当前运行:
    steps:
    - task: PowerShell@2
      condition: eq(variables['lastBuildSucceeded'], 'false')
      inputs:
        targetType: 'inline'
        script: |
          Write-Host "上一次构建未成功,终止本次定时运行"
          exit 1
    
  • 流水线最后一步添加更新变量组的任务,成功运行就把lastBuildSucceeded设为true,失败则设为false,该操作仅用到流水线本身对变量组的编辑权限,不需要额外配置ADO CLI或者服务主体权限。

方案3:用内置REST API + 流水线自带的系统访问令牌调用(无需额外权限配置)

  • 不需要单独装ADO CLI,直接用流水线内置的System.AccessToken调用ADO的REST API获取前次运行状态,只需要给流水线勾选「允许脚本访问OAuth令牌」的权限即可,不需要给服务主体额外加权限:
    steps:
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          $header = @{
            Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
          }
          $url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/builds?definitions=$env:SYSTEM_DEFINITIONID&`$top=1&queryOrder=finishTimeDescending&api-version=7.1-preview.7"
          $lastBuild = Invoke-RestMethod -Uri $url -Headers $header -Method Get
          if ($lastBuild.value[0].result -ne "succeeded") {
            Write-Host "上一次构建未成功,终止本次运行"
            exit 1
          }
      env:
        SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    
    该方法不需要任何额外的权限配置,内置的系统访问令牌默认就有读取同流水线运行记录的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 00:48:03