YAML azure 管道:如何获取以关键字开头的 DependsOn 属性下的阶段名称

问题描述 投票:0回答:1

我的 YAML 发布管道有 100 多个阶段,重要的阶段名称以“Start_Deployment_****”开头。

我最后有一个阶段,应该在上述所有阶段完成后运行。我知道我可以在第 100 个阶段的 DependsOn 属性下提供所有 99 个阶段名称,但我认为这不是一个好的解决方案。

有什么方法可以循环某些预定义变量来获取以上述字符串开头的阶段名称,并在第 100 个阶段的 DependsOn 属性下使用它们? (因为阶段名称的值在编译时可用)

stages:
- stage: Start_Deployment_1
  jobs:
  - job:
    steps:
    - script: **
    
- stage: Start_Deployment_2
  jobs:
  - job:
    steps:
    - script: **
    
- stage: Start_Deployment_3
  jobs:
  - job:
    steps:
    - script: **
.....
.....
.....
- stage: Start_Deployment_99
  jobs:
  - job:
    steps:
    - script: **
.....
- stage: DeployToPRod_100
  dependsOn:
  -  // get all above 99 stage names here, maybe using foreach on some predefined variable..
  -
  jobs:
  - job:
    steps:
    - script: **
azure-devops azure-pipelines azure-pipelines-yaml azure-yaml-pipelines
1个回答
0
投票

当您在管道中定义多个阶段时,默认情况下,它们按照您在 YAML 文件中定义的顺序依次运行。例外情况是当您添加依赖项时。有了依赖关系,阶段就按照

dependsOn
要求的顺序运行。

如果在 PROD 之前运行的阶段是以编程方式生成的(例如使用

${{ each ... }}
关键字),则可以轻松将依赖项添加到最终阶段。

示例:

parameters:
  - name: environments
    type: object
    default:
      - name: Stage1
        displayName: "Stage 1"
      - name: Stage2
        displayName: "Stage 2"
      - name: Stage3
        displayName: "Stage 3"

trigger: none

pool:
  vmImage: 'ubuntu-latest'

stages:
- ${{ each environment in parameters.environments }}:
  - stage: ${{ environment.name }}
    displayName: ${{ environment.displayName }}
    dependsOn: [] # run in parallel
    jobs:
    - job: Job1
      displayName: "Job 1"
      steps:
      - script: echo "This is ${{ environment.displayName }}, Job 1"
        displayName: "Print Message"

- stage: DeployProd
  displayName: "Deploy Prod"
  dependsOn: 
  - ${{ each environment in parameters.environments }}:
    - ${{ environment.name }}
  jobs:
    - job: Job3
      displayName: "Job 3"
      steps:
        - script: echo "This is Prod Stage"
          displayName: "Print Message"

结果:

© www.soinside.com 2019 - 2024. All rights reserved.