#azure-devops #yaml #azure-pipelines-yaml
Вопрос:
Я пытаюсь установить переменные на основе значения параметра в конвейере yaml. Кажется, я прочитал много других сообщений, в которых показаны примеры, подобные приведенному ниже, которые, по словам авторов, сработали, но я не могу преодолеть проблемы, пытаясь сделать что-то подобное ниже.
Я также перепробовал множество вариантов этого примера, слишком много, чтобы перечислять их здесь. Иногда он будет отображать «значения» в виде дубликата ключа. В других случаях мне удавалось попытаться запустить запуск и получить приглашение с выбором среды, но затем при открытии диалогового окна этапа возникает ошибка синтаксического анализа.
Есть ли какая-то разница между объявлением переменной в верхней части файла и на этапе или задании? Похоже, в этом и заключается разница, которую я замечаю, читая другие примеры.
В конечном счете, я пытаюсь установить значение переменной ServiceConnection на основе значения параметра среды.
parameters:
- name: environment
displayName: Environment
type: string
values:
- DEV
- TEST
pr: none
trigger: none
pool: PrivateAgentPool
variables:
- name: 'isMain'
value: $[eq(variables['Build.SourceBranch'], 'refs/heads/main')]
- name: 'buildConfiguration'
value: 'Release'
- name: 'environment'
value: ${{ parameters.environment }}
- name: 'ServiceConnection'
${{ if eq(variables['environment'], 'DEV') }}:
value: 'svcConnectionDev'
${{ if eq(variables['environment'], 'TEST') }}:
value: 'svcConnectionTest'
Ответ №1:
Похоже, ваше решение почти правильное. Рассмотрим приведенный ниже пример.
parameters:
- name: region
type: string
default: westeurope
values:
- westeurope
- northeurope
variables:
${{ if eq(parameters['region'], 'westeurope') }}:
ServiceConnection: "svcConnectionDev"
${{ else }}:
enter code here
если вы хотите использовать эту функцию подключения к сервису, вы можете сделать это, просто вызвав $ServiceConnection
Комментарии:
1. Спасибо за ответ, я ценю это. Я не совсем понимаю, как это необходимо: цель состоит в том, чтобы установить переменную ServiceConnection, вы правы, но это зависит от значения параметра. Если parameter.environment = «DEV», $ServiceConnection = «svcConnectionDev», и если parameter.environment = «ТЕСТ», $ServiceConnection = «svcConnectionTest». Если я попытаюсь скопировать/пропустить приведенный выше код в свой конвейер, он не будет компилироваться…значения, следующие за этим блоком, имеют ошибку «неправильный отступ записи сопоставления».