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

如何配置Azure Pipeline仅在环境审批拒绝时触发后续阶段?

问题

我们可为部署作业定义用于审批的环境。现有一个Azure Pipeline,其中stageA包含一个带环境审批检查的部署作业,以及若干常规作业。我还设置了依赖于stageA的stageB,希望仅当stageA中的部署作业被环境审批检查拒绝时才触发stageB,而stageA中其他常规作业失败时则不触发。相关YAML配置如下:

trigger:
    - none
pool:
    vmImage: ubuntu-latest
stages:
    - stage: stageA
      jobs:
          - deployment: main_job
            environment: "myenv"
            strategy:
                runOnce:
                    deploy:
                        steps:
                            - script: echo "Env_Check pass"
                              displayName: "Env_Check"
          - job: other_job
            dependsOn: main_job
            steps:
                - script: exit 1;
                  displayName: "failure task"
    - stage: stageB
      dependsOn: stageA
      condition: 'what condition should we put here??'
      jobs:
          - job:
            steps:
                - script: echo "Env-Check Rejected"
                  displayName: "approval_reject"

请问该如何实现这一需求?

解决方案

要实现仅当stageA中的部署作业main_job因环境审批被拒绝时才触发stageB,需要利用Azure Pipeline的作业状态变量和条件表达式:

  1. 核心状态判断逻辑:

    • 部署作业被审批拒绝时,其状态会被标记为Canceled(Azure Pipeline中环境审批拒绝会导致部署作业进入Canceled状态,而非Failed)
    • 常规作业失败时状态为Failed,需要排除这种触发场景
  2. stageB的条件配置:
    使用以下条件表达式,精准匹配main_job的Canceled状态:

condition: eq(dependencies.stageA.jobs['main_job'].status, 'Canceled')
  1. 完整修改后的YAML配置:
trigger:
    - none
pool:
    vmImage: ubuntu-latest
stages:
    - stage: stageA
      jobs:
          - deployment: main_job
            environment: "myenv"
            strategy:
                runOnce:
                    deploy:
                        steps:
                            - script: echo "Env_Check pass"
                              displayName: "Env_Check"
          - job: other_job
            dependsOn: main_job
            steps:
                - script: exit 1;
                  displayName: "failure task"
    - stage: stageB
      dependsOn: stageA
      condition: eq(dependencies.stageA.jobs['main_job'].status, 'Canceled')
      jobs:
          - job:
            steps:
                - script: echo "Env-Check Rejected"
                  displayName: "approval_reject"

说明:

  • dependencies.stageA.jobs['main_job'].status直接引用stageA中main_job的运行状态
  • 只有当环境审批被拒绝导致main_job进入Canceled状态时,stageB才会触发
  • 若因other_job失败导致stageA整体失败,此时main_job的状态为Succeeded(已正常执行完成),条件不满足,stageB不会触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:36