AzureDevops stage dependsOn stageDependencies

AzureDevops stage dependsOn stageDependencies

如何根据从参数派生的 stage/job-name 创建多阶段管道,而阶段 运行 首先是并行的,最后一个阶段等待所有前面的阶段?


这是我目前尝试过的方法: 多级流水线 运行s 用于多个阶段,具体取决于并行的工具参数,而 dependsOn 作为参数传递。 运行 它并行地等待每个工具的前一阶段,以便所述工具顺利工作。

主模板:一切待命

- ${{ each tool in parameters.Tools }}:
  - template: ../stages/all-wait-for-all.yml
    parameters:
      Tool: ${{ tool }}

stages/all-wait-for-all.yml

parameters:
  - name: Tool
    type: string
stages:
  - stage: ALL_WAIT_${{ parameters.Tool}}
    dependsOn:
    - PREPARE_STAGE
    - OTHER_TEMPLATE_EXECUTED_FOR_ALL_TOOLS_${{ parameters.Tool }}

现在应该有一个阶段应该只 运行 一次而不是每个工具,但它应该只 运行 在各个工具阶段完成之后。它不能硬编码,因为有各种工具。所以我希望在准备工作中定义各个等待阶段会成功:

主模板:prepare-stage

    - script: |
        toolJson=$(echo '${{ convertToJson(parameters.Tools) }}')
        tools=$(echo "$toolJson" | jq '.[]' | xargs)
        stage="ALL_WAIT"

        for tool in $tools; do
          stageName="${stage}_${tool }"
          stageWaitArray+=($stageName)
        done

        echo "##vso[task.setvariable variable=WAIT_ON_STAGES]${stageWaitArray}"
        echo "##vso[task.setvariable variable=WAIT_ON_STAGES;isOutput=true]${stageWaitArray}"
      displayName: "Define wait stages"
      name: WaitStage

stages/one-waits-for-all.yml

stages:
  - stage: ONE_WAITS
    dependsOn:
    - $[ stageDependencies.PREPARE_STAGE.PREPARE_JOB.outputs['waitStage.WAIT_ON_STAGES'] ]

而显示以下错误: Stage ONE_WAITS depends on unknown stage $[ stageDependencies.PREPARE_STAGE.PREPARE_JOB.outputs['WaitStage.WAIT_ON_STAGES'] ].

据我了解,依赖于不能在运行时评估动态 $[] 或宏 $() 表达式。您可以使用在排队时计算的模板表达式 ${{}}。

我猜我想得太多了,因为最终它很明显。

所以第一个模板可以在主模板的循环中调用,而它的执行次数与我们获得的工具一样多。一旦等待所有工具的先前阶段,应调用第二个模板,而 job/stage 前缀是已知的,只有作为后缀的工具名称是未知的。所以只需将它们直接添加到循环中 dependsOn..

给你:

stages:
  - stage: ONE_WAITS
    dependsOn:
    - PREPARE_STAGE
    - ${{ each tool in parameters.Tools }}:
      - OTHER_TEMPLATE_EXECUTED_FOR_ALL_TOOLS_${{ tool}}
      - ALL_WAIT_${{ tool }}