Передача переменной конвейера из конструктора в шаблон задания YAML

#azure-devops #azure-pipelines

#azure-devops #azure-конвейеры

Вопрос:

Изначально я хотел определить переменные конвейера в моем azure-pipelines.yml , которые я могу при необходимости установить во время очереди, но, похоже, на данный момент это не поддерживается: переменные, которые могут быть установлены во время очереди, могут быть определены только в конструкторе. Эта переменная (через запятую) имеет имя nx_versions и будет использоваться для построения матричной стратегии. Вот минимальный пример:

 # azure-pipelines.yml
jobs:
- template: job-template.yml
  parameters:
    nx_versions: $(nx_versions)
  

и

 # job-template.yml
parameters:
  nx_versions: 
    - 1

jobs:
  - job: build
    strategy:
      matrix:
        ${{ each nxver in parameters.nx_versions }}:
          NX_${{ nxver }}:
            NXVersion: ${{ nxver }}
    steps:
      - powershell: echo $(NXVersion)
  

Постановка сборки в очередь с nx_versions = 2,3 (значение на самом деле не имеет значения) приводит к ошибке:

 /job-template.yml (Line: 9, Col: 9): Expected a sequence or mapping. Actual value '$(nx_versions)'
  

Возможно ли это вообще? Я также пробовал использовать ${{ nx_versions }} и ${{ variables.nx_versions }} безрезультатно.

Это возможно с помощью полноценного дизайнерского решения.

Комментарии:

1. Я не пробовал это сам, но вы также пробовали формат выражения во время выполнения? $[variables.var], как указано здесь: learn.microsoft.com/en-us/azure/devops/pipelines/process /…

Ответ №1:

Тривиальный конвейер (не ссылающийся на шаблоны, но может быть легко расширен для этого)

 parameters:
- name: nx_versions
  type: object
  default: 
  - 1
  - 4

jobs:
  - job: build
    strategy:
      matrix:
        ${{ each nxver in parameters.nx_versions }}:
          NX_${{ nxver }}:
            NXVersion: ${{ nxver }}
    steps:
      - powershell: echo $(NXVersion)
  

Расширяется до

 parameters:
- name: nx_versions
  type: object
  default:
  - 1
  - 4
stages:
- stage: __default
  jobs:
  - job: build
    strategy:
      matrix:
        NX_1:
          NXVersion: 1
        NX_4:
          NXVersion: 4
    steps:
    - task: PowerShell@2
      inputs:
        targetType: inline
        script: echo $(NXVersion)
  

Если вы перейдете в очередь сборки для этого, вы получите страницу параметров со значениями по умолчанию:

Значения по умолчанию

которую вы можете переопределить:

Переопределение параметров

что приводит к:

Переопределенный результат задания

Ответ №2:

Я сталкиваюсь с той же проблемой. Я не думаю, что в настоящее время это возможно. Я полагаю, что над этим ведется работаhttps://github.com/Microsoft/azure-pipelines-yaml/pull/129