Azure Pipelines合并未评估

问题描述

我有要评估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)