Yaml 多阶段 运行 使用依赖和条件

Yaml multi stage run using dependson and conditions

如果 INT 的前几个阶段之一成功通过,我需要 运行“安全”阶段。我尝试了 dependson 和 conditions 但我找不到解决方案。

I have a need to run the "Secure" stage if one of the previous stages of INT was sucessfully passed.

恐怕目前还没有这样的 YAML 语法来实现这一点。

由于我们需要为stage设置多个依赖Secure:

- stage: Deploy
  dependsOn:
    - INT_API
    - INT_FuncIntergration
    - INT_Web
  condition: or(succeeded('INT_API'), succeeded('INT_FuncIntergration'), succeeded('INT_Web'))

限制:

该方法只能在前一阶段成功后执行本阶段,但当前阶段需要在前一阶段执行完毕后才能执行.如果需要只要前面一个阶段成功就执行当前阶段,这个方法还是不行。

那是因为依赖没有“OR”语法。而我们无法添加依赖条件,例如:

 - stage: Deploy
   ${{ if eq(result.INT_API, successed) }}:
    dependsOn:
      - INT_API
      - INT_FuncIntergration
      - INT_Web
    condition: or(succeeded('INT_API'), succeeded('INT_FuncIntergration'), succeeded('INT_Web'))

因为在YAML编译的时候就解析了condition,但是此时前一阶段的运行结果还没有出来

您可以将此请求条件“OR”提交到我们的 UserVoice 网站 (https://developercommunity.visualstudio.com/content/idea/post.html?space=21 ),这是我们提供产品建议的主要论坛。感谢您帮助我们构建更好的 Azure DevOps。

解决方法:

解决方案的主要思想是:您可以尝试为阶段 Secure with [] 设置依赖,然后在其他任务之前添加一个 Inline powershell 任务.此任务将调用 REST API Definitions - Get 来监视当前发布管道中的所有阶段是否具有进程中和队列状态。如果是,则等待 30 秒,然后再次循环,直到当前发布管道中的所有其他阶段都没有 inprocess 和 queue 状态。然后next execute会执行其他任务。

您可以查看我的 了解详细信息: