Azure Конвейерное использование шаблона выражения с переменными в очереди - PullRequest
0 голосов
/ 31 марта 2020

Я определил конвейер сборки YAML в azure:

variables:
  test: '${{ variables.Environment }}'

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: |
    echo $(test)
  displayName: 'Show test'

Я ставлю в очередь этот конвейер с переменной Environment, определенной как 'ab c': Environment = abc

Я ожидаю, что echo abc, но вместо этого ab c заменяется ничем - переменными. Кажется, что среда не определена.

Позже я хочу загрузить другую группу переменных в зависимости от переменная Environment, поэтому я не отображаю $ (Environment) непосредственно в скрипте. Это просто упрощенный пример.

1 Ответ

1 голос
/ 02 апреля 2020

Я ожидаю, что он отобразит ab c, но вместо этого ab c заменяется ничем - переменными. Кажется, что среда не определена.

Согласно этого документа :

Время выполнения происходит после расширения шаблона. Переменные шаблона обрабатываются во время компиляции и заменяются до запуска среды выполнения. Переменные шаблона молча объединяются с пустыми строками, когда значение замены не найдено.

Так что в вашем случае echo $(test) выведите только пустую строку. Потому что переменные очереди используются во время выполнения. Для этого вы можете рассмотреть возможность использования макроса или выражения времени выполнения для времени выполнения. И test: $(Environment), и test: $[variables.Environment] хорошо работают на моей стороне.

Позже я хочу загрузить другую группу переменных в зависимости от переменной Environment, поэтому я не отображаю $ (Environment) прямо в сценарии. Это просто упрощенный пример.

Как я знаю, связывание различных групп переменных в зависимости от переменной Dynami c Environment пока не поддерживается, вот одно обсуждение об этом топи c. И это один хороший обходной путь в этом сценарии.

В настоящее время Azure Devops Service внедряет новую функцию параметры времени выполнения , я думаю, что она может удовлетворить большинство ваши требования. Это может быть лучшим выбором для вас, используйте параметры времени выполнения вместо неподдерживаемой переменной Dynami c Environment.

Мой простой тест об этой опции:

1.Содержание в yaml:

parameters:
- name: group
  displayName: Group Name
  type: string
  default: TestGroup
  values:
  - TestGroup
  - Group2
  - Group3
  - Group4

variables:
- group: ${{ parameters.group }}

steps:
- script: |
    echo $(Name)
  displayName: 'Show group name'

2.Моя группа переменных TestGroup:

enter image description here

3.Нажмите конвейер запуска:

enter image description here

4. Трубопровод работает хорошо и отображает переменную, определенную в группе переменных:

enter image description here

Надеюсь, это поможет:)

...