Определите переменную списка в конвейере Azure devops во время выполнения

#azure-devops #azure-pipelines

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

Вопрос:

У меня есть файл YAML конвейера Azure, и я не могу понять, как объявить переменную списка в скрипте и использовать ее на следующем шаге.

Я хотел бы что-то вроде этого:

 - script: echo "##vso[task.setvariable variable=packages]@('a','b')"
  
- template: publish-template.yml
  parameters:
    packages: packages
  

или

 - script: echo "##vso[task.setvariable variable=packages]@('a','b')"
  
- ${{ each package in parameters.packages }}:
  - script: echo ${{ package }}
  

Но я не могу понять, как это возможно.

Спасибо 🙂

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

1. Вы пытаетесь смешать переменные макроса (которые устанавливаются во время выполнения) с выражениями (которые расширяются во время анализа конвейера) — по сути, вы не можете этого сделать.

2. Привет @Or Gaizer, есть ли какие-либо обновления об этом билете? Не стесняйтесь, дайте мне знать, если у вас возникнут какие-либо вопросы. Если ответ может помочь, вы можете рассмотреть возможность его принятия.

Ответ №1:

Вы не можете этого сделать. Переменные хранятся в виде строк. Таким образом, это script: echo "##vso[task.setvariable variable=packages]@('a','b')" приведет к созданию строки ('a','b') , а не массива. Вы можете проанализировать задачу скрипта и обработать как массив, но нет способа, чтобы массив обслуживался на уровне to, как вы показываете в своем примере.

Пожалуйста, проверьте это здесь:

Переменные Yaml всегда были строковыми: строковые сопоставления. Документ, похоже, в настоящее время исправлен, хотя, возможно, у нас была ошибка при последнем посещении.

В ближайшем будущем мы готовимся выпустить функцию, которая позволит вам передавать более сложные структуры. Следите за обновлениями!

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

1. Есть новости по этому поводу? Я хотел бы добавить выпадающее меню, которое создается из сценария или задачи. Тогда значения будут доступны для пользователя, чтобы выбрать его, а затем запустить конвейер