我正在从 msft 文档中查看这个示例:
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
- stage: B
dependsOn: A
jobs:
- job: B1
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]
steps:
- bash: echo $(myStageAVar)
在上面的例子中,我是否可以在无需设置的情况下访问阶段 B 中的变量:
- job: B1
variables:
myStageAVar: $[stageDependencies.A.A1.outputs['MyOutputVar.myStageVal']]
基本上,我尝试在阶段
##vso
中使用 A
动态设置 x 个变量,因此我需要能够在阶段 B
中访问它,而不必使用该 variables:
部分。
我可以在访问步骤中执行类似
$(stageDependencies.A.A1.outputs['MyOutputVar.myStageVal')
的操作吗? 我在文档中没有看到任何这样的示例。
更新:我确实尝试过,但没有成功:
stages:
- stage: A
jobs:
- job: A1
steps:
- bash: echo "##vso[task.setvariable variable=myStageVal;isOutput=true]this is a stage output variable"
name: MyOutputVar
- stage: B
dependsOn: A
jobs:
- job: B1
steps:
- bash: echo $(stageDependencies.A.A1.outputs['MyOutputVar.myStageVal'])
回到我的主要问题,有没有办法在没有阶段 b 中的变量:部分的情况下访问这个变量?
更新:我的案例的更具体示例
stages:
- stage: A
jobs:
- job: A1
steps:
- script: |
for cluster in $clusters; do
VARIABLE_NAME="live_${cluster}_${{ parameters.environment }}"
echo "##vso[task.setvariable
variable=$VARIABLE_NAME;isOutput=true]my unique ${{ parameters.environment }}
done
- stage: B
dependsOn: A
jobs:
- job: B1
steps:
- bash: echo "now i want to access a specific variable that was set in the above stage"
以上是我想要实现的目标的简化示例。 我知道创建的每个 var 将基于我正在创建的循环,但我不知道如何动态指定阶段 b 中的变量:部分中的所有变量,因此我尝试直接访问它们。
您可以考虑一个解决方法:
variables:
- group: myVariabes
在需要设置一些新变量的管道作业中,您可以调用REST API“Variablegroups - Update”将这些新变量和值添加到上面创建的变量组中。
然后后续的作业/阶段可以直接访问变量组中的变量。