我们有两个在同一阶段运行的部署作业。第一个作业创建一个输出变量,第二个作业使用该输出变量(从这里借用的代码并在我们的管道中以相同的方式实现)。
jobs:
- deployment: producer
environment:
name: ${{ parameters.environment }}
resourceType: VirtualMachine
tags: ${{ parameters.tags }}
strategy:
runOnce:
deploy:
steps:
- script: echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]this is the deployment variable value"
name: setvarStep
- script: echo $(setvarStep.myOutputVar)
name: echovar
- deployment: consumer_deploy
dependsOn: producer
variables:
myVarFromDeploymentJob: $[ dependencies.producer.outputs['deploy_Vm1.setvarStep.myOutputVar'] ]
environment:
name: ${{ parameters.environment }}
resourceType: VirtualMachine
tags: ${{ parameters.tags }}
strategy:
runOnce:
deploy:
steps:
- script: "echo $(myVarFromDeploymentJob)"
name: echovar
这是可行的,因为我们引用了生产者部署作业在其上运行的虚拟机(硬编码)。但是,并非每个阶段都将在同一虚拟机上运行。
我已经尝试过常规变量($(Agent.MachineName))以及表达式语法,从模板文件传递变量并更改变量模板的范围,但它们都不起作用并且“myVarFromDeploymentJob”变量保持为空.
有没有办法让表达式变量中的虚拟机名称更灵活?所以从这个开始:
$[ dependencies.producer.outputs['deploy_Vm1.setvarStep.myOutputVar'] ]
对于这样的事情:
$[ dependencies.producer.outputs['deploy_$(Agent.MachineName).setvarStep.myOutputVar'] ]