我试图在两个作业之间的Azure部署中传递一个变量,(部署)。根据文档,由于我使用runOnce
和resourceType
,我需要在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)?
2条答案
按热度按时间yi0zb3m41#
根据您的描述,您需要使用嵌套变量:
$[ dependencies.A.Outputs.['Deploy_$(Environment.ResourceName).printVar.OutputVar'] ]
来获取上一个作业中的输出值。我担心Azure DevOps不支持嵌套变量。因此变量:**$(Environment.ResourceName)**无法按预期展开。
如何在不将值硬编码到脚本中的情况下传递$(Environment.ResourceName)?
我建议您可以更改为使用参数将值传递给变量。
然后可以使用格式:
$[ dependencies.A.outputs['${{parameters.name}}.setvarStep.myOutputVar'] ]
举例来说:
字符串
70gysomp2#
你不能直接在作业B中使用
Environment.ResourceName
。它是一个部署作业变量,作用域是特定的部署作业,所以作业B中没有这样一个名为Environment.ResourceName
的变量。据我所知,目前只支持硬编码的Map变量的方式。