在以下示例中,我能够访问jobA
的输出变量,但不能访问deploymentA
的输出变量。主要区别在于jobA
是“正常”作业,而deploymentA
是部署作业。
jobs:
- deployment: deploymentA
environment: Test
strategy:
runOnce:
deploy:
steps:
- checkout: none
- pwsh: |
echo "##vso[task.setvariable variable=someVar;isOutput=true]someValue"
name: someName
- job: jobA
steps:
- checkout: none
- pwsh: |
echo "##vso[task.setvariable variable=someVarA;isOutput=true]someValueA"
name: someNameA
- job: jobB
dependsOn:
- deploymentA
- jobA
variables:
deployJobVar: $[dependencies.deploymentA.outputs['someName.someVar']]
jobVar: $[dependencies.jobA.outputs['someNameA.someVarA']]
steps:
- checkout: none
- pwsh: |
echo "$(deployJobVar)" # will display empty string
echo "$(jobVar)" # will display 'someValueA'
我发现的best hint是:
如果要从矩阵或切片中设置变量,则要引用该变量,则必须包括作业名称以及从下游作业访问它时的步骤。
并不完全相同,但是我尝试在相似的标识符之前加上前缀,但以下任何一项均无效:
$[dependencies.deploymentA.outputs['runOnce.someName.someVar']]
$[dependencies.deploymentA.outputs['deploy.someName.someVar']]
$[dependencies.deploymentA.outputs['runOnce.deploy.someName.someVar']]
有人知道用于访问从部署作业输出的特定变量的正确语法吗?或者,有人知道如何显示所有输出的变量吗?
答案 0 :(得分:1)
文档目前尚不完整,但是有了一点想象力,我们可以注意到Set a multi-job output variable的第二部分适用。
您需要做的就是以作业名称作为前缀引用变量:deploymentA.someName.someVar
而不是someName.someVar
:
deployJobVar: $[dependencies.deploymentA.outputs['deploymentA.someName.someVar']]
是的,deploymentA
出现了两次。
答案 1 :(得分:0)
访问从变量输出的特定变量的正确语法 部署工作?
您使用的语法变量是正确的。出于导致下一个“正常”作业中没有显示值的原因,实际上您之前已经提到过,这是一个部署作业。
在您的YAML脚本中,在发布作业中创建部署作业中的变量someVar
。即使您设置了isOutput=true
,该变量也不能传递到舞台上。(注意:这仅在Release管道中发生)。仅当您使用##vso[task.setvariable]
定义它时,它才存在于当前工作中。
在发布管道中,部署作业彼此独立。这意味着,如果您在任务(等效步骤)中定义变量,则无法从作业中访问该变量。您也可以使用经典编辑器对此进行测试。
如果要在其他作业中使用它,解决方法是最好将其存储在Key Vault等存储中。然后在下一个作业中使用它。