Объединение 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(). Ни один из них не работает, но этот самый близкий, поскольку он фактически заменяет переменные правильно.

Любые идеи?


person dx_over_dt    schedule 03.09.2020    source источник


Ответы (1)


Оказалось, что мне нужно поместить выражение в 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)
person dx_over_dt    schedule 03.09.2020
comment
Спасибо, что поделились своим решением! Пожалуйста, примите это как ответ, как только сможете, это может быть полезно для других членов сообщества, читающих эту ветку. - person LoLance; 07.09.2020
comment
Мне нужно было сделать то же самое, будьте осторожны, если parameters.pipeline когда-либо имеет значение null, это выражение не сработает, если вы не заключите его в кавычки, например: '$ {{parameters.pipeline}}' - person Adam S; 17.07.2021