如何根据从参数派生的阶段/作业名称创建多阶段管道,而阶段首先并行运行,最后是等待前所有阶段的一个阶段?
到目前为止,我尝试过的是:一个多阶段的管道运行几个阶段,依赖于并行的工具参数,而dependsOn是作为参数传递的。对于等待所述工具的前一阶段的每个工具,并行运行该工具可以顺利地工作。
主模板:所有等待所有人
- ${{ each tool in parameters.Tools }}:
- template: ../stages/all-wait-for-all.yml
parameters:
Tool: ${{ tool }}各阶段/所有等待.all
parameters:
- name: Tool
type: string
stages:
- stage: ALL_WAIT_${{ parameters.Tool}}
dependsOn:
- PREPARE_STAGE
- OTHER_TEMPLATE_EXECUTED_FOR_ALL_TOOLS_${{ parameters.Tool }}现在应该有一个阶段应该只运行一次,而不是每个工具,但它应该只在完成单个工具阶段之后运行。它不能硬编码,因为有各种各样的工具。因此,我希望在准备工作中确定个人等待阶段会得到解决:
主要模板:准备阶段
- 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阶段/等待所有的.one
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'] ].
发布于 2022-04-20 06:21:02
我想我想的太多了,因为最终它是很明显的。
因此,第一个模板可以在主模板的循环中调用,而它的执行次数与我们获得的工具一样多。第二个模板应该在等待所有工具的前一个阶段时调用,而作业/阶段前缀是已知的,只有后缀的工具名是未知的。因此,只需将它们直接添加到dependsOn中的循环中即可。
给你:
stages:
- stage: ONE_WAITS
dependsOn:
- PREPARE_STAGE
- ${{ each tool in parameters.Tools }}:
- OTHER_TEMPLATE_EXECUTED_FOR_ALL_TOOLS_${{ tool}}
- ALL_WAIT_${{ tool }}发布于 2022-04-13 16:11:32
据我所知,无法在运行时对动态$[]或宏$()表达式进行计算。可以使用在队列时计算的模板表达式${}。
https://stackoverflow.com/questions/71854424
复制相似问题