答案 0 :(得分:1)
如果成功通过 INT 的前一阶段之一,我需要运行“安全”阶段。
恐怕目前没有这样的 YAML 语法来实现这一点。
由于我们需要为阶段 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的时候已经解析了条件,但是此时上一阶段的运行结果还没有出来。
您可以将此请求条件“OR”提交到我们的 UserVoice 网站 (https://developercommunity.visualstudio.com/content/idea/post.html?space=21 ),这是我们提供产品建议的主要论坛。感谢您帮助我们构建更好的 Azure DevOps。
解决方法:
解决方案的主要思想是:您可以尝试使用 []
为阶段 Secure 设置依赖,然后在其他任务之前添加一个 Inline powershell 任务。此任务将调用 REST API Definitions - Get 来监视当前发布管道中的所有阶段是否都具有 inprocess 和 queue 状态。如果是,请等待 30 秒,然后再次循环,直到当前发布管道中的所有其他阶段都没有 inprocess 和 queue 状态。然后 next execute 将执行其他任务。
您可以查看我的 previous ticket 了解详细信息: