Azure YML管道模板表达式中如何终止each循环,仅添加一次指定PowerShell任务?
解决方案
你可以通过全局存在性校验替代遍历匹配时重复插入任务的逻辑,从根源上避免PowerShell任务重复生成,有两种常用实现方案:
方案1:全局判定后统一添加(最简洁)
先判断作业步骤中是否存在至少1个DotNetCoreCLI任务,存在则仅添加一次PowerShell任务,适合需要把PowerShell放在所有步骤最前/最后的场景:
# 先做全局判定,存在DotNetCoreCLI任务则添加一次PowerShell {{ if any(job.steps, step => startsWith(keys(step)[0], 'DotNetCoreCLI@')) }}: - powershell: | ## run some powershell commands here {{ end }} # 再正常输出所有原有作业步骤 {{ each step in job.steps }}: - {{ step }} {{ end }}
方案2:加标记变量控制插入时机
如果需要把PowerShell任务插入到第一个DotNetCoreCLI任务的前/后位置,可以通过临时标记变量控制仅插入一次:
{{ $dotNetCliFound := false }} {{ each step in job.steps }}: # 第一次遇到DotNetCoreCLI任务时先插入PowerShell {{ if not $dotNetCliFound }} {{ each pair in step }} {{ if startsWith(pair.key, 'DotNetCoreCLI@') }} {{ $dotNetCliFound = true }} - powershell: | ## run some powershell commands here {{ end }} {{ end }} {{ end }} # 输出原有步骤 - {{ step }} {{ end }}
两种方案都只会生成唯一的PowerShell任务,不会在构建时间线中出现重复条目。
内容的提问来源于stack exchange,提问作者Ashish Kumar
相关产品推荐
相关产品推荐

