【问题标题】:Iterative insertion over depenencies and condition on Multistage Azure DevOps Yamls在多阶段 Azure DevOps Yamls 上迭代插入依赖项和条件
【发布时间】:2020-11-04 10:20:12
【问题描述】:

我想对一个模板有多个依赖项。有没有办法在参数数组的迭代中建立条件?

parameters:
  deps: [Integration, Migration]


jobs:
- deployment: Deploy
  displayName: 'Deploy'
  dependsOn: 
  - ${{ each dep in parameters.deps }}:
    - ${{ dep }}
  condition: 
  - ${{ each dep in parameters.deps }}:
    - in(dependencies.${{ dep }}.result, 'Succeeded', 'Skipped')
  environment: QA
  strategy:                 
    runOnce: 
      deploy: 
        steps:
        - bash: |
            echo "Deploy dev"

这个被标记为 (Line: 12, Col: 3): A sequence was not expected

【问题讨论】:

  • Condition 不能接受表达式序列。您可能需要检查模板外的依赖项作业的状态。请查看以下示例。

标签: azure-devops yaml multistage-pipeline


【解决方案1】:

错误是由以下情况引起的:

condition: 
- ${{ each dep in parameters.deps }}:
  - in(dependencies.${{ dep }}.result, 'Succeeded', 'Skipped')

上面的 yaml 将被评估为:

condition: 
  - in(dependencies.Integration.result, 'Succeeded', 'Skipped')
  - in(dependencies.Migration.result, 'Succeeded', 'Skipped')

Condition 不能接受表达式序列。多个表达式应与andorxor 连接。请参阅here 了解更多信息。

您可能需要评估模板之外的条件。

例如,在 azure-pipelines.yml 中添加一个附加作业以依赖于上述作业:见下文:

  #azure-pipelines.yml

 - job: CheckStatus
   dependsOn:
   - Integration
   - Migration
   condition: |
     and
     (
      in(dependencies.Integration.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
      in(dependencies.Migration.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
     )
     
   steps:
   - powershell: 

 - template: template.yaml

   parameters:
     deps: CheckStatus

然后您可以在模板中检查作业的状态CheckStatus

#template.yml
parameters:
  deps: CheckStatus
  
jobs:
- job: secure_buildjob
  dependsOn: ${{parameters.deps}}
  condition: eq(dependencies.${{ parameters.deps }}.result, 'Succeeded')
      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多