问题描述
我有要评估coalesce(${{ parameters.pipeline }},$(System.DeFinitionId))
的模板。
据我所知,这是正确的语法:
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'specific'
project: '$(System.TeamProjectId)'
pipeline: $[ coalesce(${{ parameters.pipeline }},$(System.DeFinitionId)) ]
buildVersionTodownload: latestFromBranch
branchName: $[ coalesce(${{ parameters.branchName }},$(Build.sourceBranch)) ]
allowPartiallySucceededBuilds: true
downloadType: 'single'
downloadpath: '$(Pipeline.Workspace)'
artifactName: ${{ parameters.artifact }}
但是,当我运行它时,出现此错误:
定义名称$ [coalesce(141,342)]与有效的定义不对应
我认为,这可能意味着它没有对表达式求值,而没有使用文字字符串'$[ coalesce(141,342) ]'
。
似乎Build.DeFinitionId
仅在运行时可用,否则我会将参数默认设置为${{ Build.DeFinitionId }}
,而只需设置pipeline: ${{ parameters.pipeline }}
。
我已经在$[ ]
内外使用${{ }}
,$( )
和coalesce()
语法尝试了十二种不同的变体。它们都不起作用,但是这是最接近的,因为它实际上可以正确替换变量。
有什么想法吗?
解决方法
原来,我需要将表达式放在作业的variables
中,并使用variables['System.DefinitionId']
代替$( )
语法。
- job: #...
variables:
pipeline: $[ coalesce(${{ parameters.pipeline }},variables['System.DefinitionId']) ]
branchName: $[ coalesce(${{ parameters.branchName }},variables['Build.SourceBranch']) ]
steps:
# ...
- task: DownlaodBuildArtifact@0
inputs:
# ...
pipeline: $(pipeline)
branchName: $(branchName)