【问题标题】:Use if conditions inside a loop in Azure DevOps pipelines在 Azure DevOps 管道的循环内使用 if 条件
【发布时间】:2021-12-23 09:46:08
【问题描述】:

我正在尝试构建一个基于参数值执行不同阶段的管道模板:

parameters:
- name: environments
  type: object
  default: {}

stages:
  - template: templates/stage-download-packages.yml
    parameters:
      dsArtifactFeedName: "${{ parameters.dsArtifactFeedName }}"
      azureProjectName: "${{ parameters.azdoProjectName }}"

  - ${{ each environment in parameters.environments }}:
      ${{ if eq(environment.values.isForValidation, 'false') }}:
      - template: templates/stage-deploy-to-env.yml
        parameters:
          ansibleArtifactName: "${{ environment.value.ansibleArtifactName }}"
          ansibleArtifactFeedName: "${{ environment.value.ansibleArtifactFeedName }}"
          ansibleArtifactVersion: "${{ environment.value.ansibleArtifactVersion }}"
          ansibleHostsInventoryFile: "${{ environment.value.ansibleHostsInventoryFile }}"
          ansiblePlaybookFile: "${{ environment.value.ansiblePlaybookFile }}"
          buildNumber: "${{ environment.value.buildNumber }}"
          env: "${{ environment.key }}"
          envLong: "${{ environment.value.displayName }}"
          hostFromInventory: "${{ environment.value.ansibleHostFromInventory }}"
          keyVaultConnection: "${{ environment.value.keyVaultConnection }}"
          keyVaultName: "${{ environment.value.keyVaultName }}"
          updateAzVaults: true
      ${{ if eq(environment.values.isForValidation, 'true') }}:
      - stage: "${{ environment.key }}"
        displayName: "${{ environment.value.displayName }}"
        jobs:
          - deployment: 
            environment: "${{ environment.key }}"

在当前情况下,检查isForValidation 值的 if 语句会抛出异常:

Encountered error(s) while parsing pipeline YAML:
Object reference not set to an instance of an object.

我们如何对循环的当前项使用 if 条件?

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    似乎我遗漏了一些缩进,这是最终的有效代码:

      - ${{ each environment in parameters.environments }}:
          - ${{ if ne(parameters.environments[environment.key].isForValidation, 'true') }}:
            - template: templates/stage-deploy-to-env.yml
              parameters:
                ansibleArtifactName: "${{ environment.value.ansibleArtifactName }}"
                ansibleArtifactFeedName: "${{ environment.value.ansibleArtifactFeedName }}"
                ansibleArtifactVersion: "${{ environment.value.ansibleArtifactVersion }}"
                ansibleHostsInventoryFile: "${{ environment.value.ansibleHostsInventoryFile }}"
                ansiblePlaybookFile: "${{ environment.value.ansiblePlaybookFile }}"
                buildNumber: "${{ environment.value.buildNumber }}"
                env: "${{ environment.key }}"
                envLong: "${{ environment.value.displayName }}"
                hostFromInventory: "${{ environment.value.ansibleHostFromInventory }}"
                keyVaultConnection: "${{ environment.value.keyVaultConnection }}"
                keyVaultName: "${{ environment.value.keyVaultName }}"
                updateAzVaults: true
          - ${{ if eq(parameters.environments[environment.key].isForValidation, 'true') }}:
            - stage: "${{ environment.value.stageName }}"
              displayName: "${{ environment.value.displayName }}"
              jobs:
                - deployment: 
                  environment: "${{ environment.key }}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2019-11-23
      相关资源
      最近更新 更多