Azure Devops 管道 yml 在各个阶段循环

use*_*684 7 azure-devops azure-pipelines

我如何循环遍历数组或对象来创建阶段?

下面是一个有效的 yml 文件。您可以看到构建阶段在作业的参数环境上循环。在发布阶段是否有可能实现同样的目标?

发布阶段需要手动批准,必须按顺序运行并且只有在前一阶段成功完成后才能运行?

parameters:
  - name: 'environments'
    type: object
    default: 
      - environment: development
        variableGroup: strata2-admin-spa-vg
        dependsOn: 'build'
      - environment: test
        variableGroup: strata2-test-admin-spa-vg
        dependsOn: 'development'
      - environment: production
        variableGroup: strata2-development-variables
        dependsOn: 'development'
  - name: 'buildTemplate'
    type: string
    default: buildTemplate.yml
  - name: 'publishTemplate'
    type: string
    default: publishTemplate.yml

trigger:
  - main

pool:
  vmImage: ubuntu-latest

stages:
  
  - stage: build
    displayName: Build stage
    jobs: 


# Can I do this for stages?
      - ${{each build in parameters.environments}}:
        - template: ${{parameters.buildTemplate}}
          parameters:
            environment: ${{build.environment}}
            variableGroup: ${{build.variableGroup}}


# How to loop over parameters.environments to dynamically create stages
  - stage: Publish_Development
    displayName: Publish development environment
    dependsOn: build
    jobs:
      - template: ${{parameters.publishTemplate}}
        parameters:
          environment: Development_websites
          variableGroup: strata2-admin-spa-vg

  - stage: Publish_Test
    displayName: Publish test environment
    dependsOn: Publish_Dev
    jobs:
      - template: ${{parameters.publishTemplate}}
        parameters:
          environment: Test_websites
          variableGroup: strata2-test-admin-spa-vg

  - stage: Publish_Production
    displayName: Publish production environment
    dependsOn: Publish_Test
    jobs:
      - template: ${{parameters.publishTemplate}}
        parameters:
          environment: Production_websites
          variableGroup: strata2-development-variables
Run Code Online (Sandbox Code Playgroud)

小智 6

虽然接受的答案是正确的 - 但它并不那么清楚 - 在我让它正常工作之前我花了一些时间摆弄

这是我如何运行循环的

parameters:
  - name: stages
    type: object
    default:
      - stage: Sandbox
        dependsOn: Build
      - stage: Dev
        dependsOn: DeploySandbox    
      - stage: PreProd
        dependsOn: Build
      - stage: Prod
        dependsOn: DeployPreProd

stages:
  - stage: Build
    displayName: Build
    jobs:
    - job:
      displayName: Build_Job

  - ${{ each stage in parameters.stages }} :
      - stage: Deploy${{ stage.stage }}
        displayName: Deploy ${{ stage.stage }} Environment
        dependsOn: ${{ stage.dependsOn }}
        variables:
          - name: system. Debug
            value: true
        jobs:
        - job: 
          displayName: "${{ stage.stage }}"
          steps:
            - script: echo Hello, world!
              displayName: 'Deploying to ${{ stage.stage }}'
Run Code Online (Sandbox Code Playgroud)

从现在开始,我将使用它来显着减少管道中的重复,希望这将帮助人们更快地掌握速度

干杯

-=A=-


Dej*_*489 3

您可以按照创建环境对象的方式创建阶段对象。

stages: 
  Publish_Development:
   - stage: Publish_Development
   - displayName: Publish development environment
   - dependsOn: 
   - ... 
  Publish_Test
   - stage: Publish_Development
   - ...
Run Code Online (Sandbox Code Playgroud)

然后您可以像处理环境一样循环阶段对象。

- ${{each stage in parameters.stages}}:
  - stage: ${{ stage.stage }} 
    displayName: ${{ stage.displayName}} 
    dependsOn: ${{ stage.dependsOn}} 
    ...
Run Code Online (Sandbox Code Playgroud)