假设我从这种有效的配置开始:
jobs:
- job: ARelease
pool:
vmImage: 'Ubuntu-16.04'
steps:
- script: |
echo "##vso[task.setvariable variable=ReleaseVar;isOutput=true]1"
name: JobResult
- job: C
pool:
vmImage: 'Ubuntu-16.04'
dependsOn: ARelease
variables:
AVar: $[ dependencies.A.outputs['JobResult.ReleaseVar'] ]
steps:
- script: |
echo $(AVar)
按预期的作业C输出1。
现在让我们说我必须添加一个新的作业ADebug,它与ARelease几乎相同,因此我使用一种策略:
jobs:
- job: A
strategy:
matrix:
Release:
BUILD_TYPE: Release
Debug:
BUILD_TYPE: Debug
pool:
vmImage: 'Ubuntu-16.04'
steps:
- script: |
echo "##vso[task.setvariable variable=$(BUILD_TYPE)Var;isOutput=true]1"
name: JobResult
- job: C
pool:
vmImage: 'Ubuntu-16.04'
dependsOn: A
variables:
AReleaseVar: $[ dependencies.A.outputs['JobResult.ReleaseVar'] ]
ADebugVar: $[ dependencies.A.outputs['JobResult.DebugVar'] ]
steps:
- script: |
echo $(AReleaseVar)
echo $(ADebugVar)
我希望一切正常,并且可以看到输出。.但是输出为空。
使用诊断对作业进行排队,看来$[ dependencies.A.outputs['JobResult.ReleaseVar'] ]
和$[ dependencies.A.outputs['JobResult.DebugVar'] ]
的值为Null。
我尝试了不同的变体来访问这些变量,但是它总是计算为Null。
您知道什么是正确的方法吗?
答案 0 :(得分:1)
格式如下:dependencies.{job}.outputs['{matrix/slice key}.{step name}.{variable name}']
在您的方案中,您使用矩阵策略( Release , Debug )运行了 Job A ,并分别设置了变量名称分别是 ReleaseVar 和 DebugVar 。准确访问这些变量的方法是:
dependencies.A.outputs['Release.JobResult.ReleaseVar']
dependencies.A.outputs['Debug.JobResult.DebugVar']
另一方面,也许您可以使用相同的变量名,因为您已经能够根据矩阵名区分值。