azure 尝试在两个部署作业之间传递变量,我不能使用$(Environment.ResourceName),它仅在资源名称被硬编码时有效

gblwokeq  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(89)

我试图在两个作业之间的Azure部署中传递一个变量,(部署)。根据文档,由于我使用runOnceresourceType,我需要在variable:标记中传递资源名称。
资源名称是一个环境变量$(Environment.ResourceName)

stages:
- stage: Stage
  jobs:
  - deployment: A
...
          steps:
          - bash: echo "##vso[task.setvariable variable=OutputVar;isOutput=true]$myVar"
            env:
              myVar: 'Hello World'
            name: printvar

  - deployment: B
...
  variables:
    Variable1: $[ dependencies.A.Outputs.['Deploy_$(Environment.ResourceName).printVar.OutputVar'] ]
    Variable2: $[ dependencies.A.Outputs.['Deploy_MyResourceName.printVar.OutputVar'] ]

...

字符串
但是当我运行上面的代码时,Variable1没有被设置,但是Variable2被正确设置了。
所以,Variable1没有被设置的原因是因为$(Environment.ResourceName)没有被消耗。
我还尝试输出$(Environment.ResourceName)的值,该值被正确设置为MyResourceName(在上面的示例中)。
如何在不将值硬编码到脚本中的情况下传递$(Environment.ResourceName)?

yi0zb3m4

yi0zb3m41#

根据您的描述,您需要使用嵌套变量:$[ dependencies.A.Outputs.['Deploy_$(Environment.ResourceName).printVar.OutputVar'] ]来获取上一个作业中的输出值。
我担心Azure DevOps不支持嵌套变量。因此变量:**$(Environment.ResourceName)**无法按预期展开。
如何在不将值硬编码到脚本中的情况下传递$(Environment.ResourceName)?
我建议您可以更改为使用参数将值传递给变量。
然后可以使用格式:$[ dependencies.A.outputs['${{parameters.name}}.setvarStep.myOutputVar'] ]
举例来说:

parameters:
  - name: MyResourceName
    type: string
    default: MyResourceName

pool:
  vmImage: windows-latest

stages:
- stage: Stage
  jobs:
  - deployment: A
...
          steps:
          - bash: echo "##vso[task.setvariable variable=OutputVar;isOutput=true]$myVar"
            env:
              myVar: 'Hello World'
            name: printvar

  - deployment: B
...
  variables:
    Variable1: $[ dependencies.A.Outputs.['Deploy_${{parameters.MyResourceName}}.printVar.OutputVar'] ]
    Variable2: $[ dependencies.A.Outputs.['Deploy_MyResourceName.printVar.OutputVar'] ]

字符串

70gysomp

70gysomp2#

你不能直接在作业B中使用Environment.ResourceName。它是一个部署作业变量,作用域是特定的部署作业,所以作业B中没有这样一个名为Environment.ResourceName的变量。据我所知,目前只支持硬编码的Map变量的方式。

相关问题