1

我们有两个在同一阶段运行的部署作业。第一个作业创建一个输出变量,第二个作业使用该输出变量(从这里借用的代码并在我们的管道中以相同的方式实现)。

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'] ]
4

1 回答 1

0

为其他人添加解决方案。

这里缺少文档链接:https ://docs.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops#support-for-output-variables

对于 runOnce 部署,取决于您是在解决整个部署(重复作业名称)还是资源部署(使用 deploy_resourceName):

variables:
  myVarFromDeploymentJob: $[ dependencies.A2.outputs['A2.setvarStepTwo.myOutputVar'] ]
  myOutputVarTwo: $[ dependencies.A2.outputs['Deploy_vmsfortesting.setvarStepTwo.myOutputVarTwo'] ]
于 2022-01-26T14:25:06.587 回答