Azure Pipelines 合并未进行评估

dx_*_*_dt 2 azure-devops azure-pipelines azure-pipelines-yaml

我有我想要评估的模板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 }}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此命令时,我收到此错误:

定义名称 $[ coalesce(141, 342) ] 与有效定义不对应

认为这可能意味着它没有评估表达式并使用文字 string '$[ coalesce(141, 342) ]'

似乎Build.DefinitionId只在运行时可用,否则我会将参数默认设置为${{ Build.DefinitionId }},然后设置pipeline: ${{ parameters.pipeline }}

我已经尝试了十几种不同的变体$[ ],在. 它们都不起作用,但这个是最接近的,因为它实际上正确地替换了变量。${{ }}$( )coalesce()

有任何想法吗?

dx_*_*_dt 7

事实证明,我需要将表达式放在作业的 中variables,并使用 usevariables['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)
Run Code Online (Sandbox Code Playgroud)