Как я могу использовать условие «или» в блоке переменных в AzureDevops?

#azure-devops #azure-pipelines #cicd

Вопрос:

Я пытаюсь установить значение var1, если режим не dev или переменная var2 имеет значение true

   - name: var1
    value: $[or(eq(variables['var2'], true), ne(variables['Mode'], 'dev'))]
 

Но когда я запускаю конвейер, я вижу, что переменная принимает значение false

   var2:
    Parsing expression: <or(eq(variables['var2'], true), ne(variables['Mode'], 'dev'))>
    Evaluating: or(eq(variables['var2'], True), ne(variables['Mode'], 'dev'))
    Expanded: or(eq('$[or(eq(variables[''var2''], true), ne(variables[''Mode''], ''dev''))]', True), ne('dev', 'dev'))
    Result: 'False'
 

Что я сделал не так?

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

1. Пробовали ли вы альтернативные методы переменного расширения? Такие как variables.var2

Ответ №1:

Я проверил это:

 variables:
- group: Some-secrets
- name: Mode
  value: prod
- name: var2
  value: true
- name: var1
  value: $[or(eq(variables['var2'], true), ne(variables['Mode'], 'dev'))]


pool:
  vmImage: ubuntu-latest

steps:
- script: env | sort
  displayName: 'Display env variables'

- script: |
    echo "$(var1)"
    echo "$(var2)"
 

и это было оценено должным образом:

   var1:
    Parsing expression: <or(eq(variables['var2'], true), ne(variables['Mode'], 'dev'))>
    Evaluating: or(eq(variables['var2'], True), ne(variables['Mode'], 'dev'))
    Expanded: or(eq('true', True), ne(variables['Mode'], 'dev'))
    Result: 'True'
 

Не могли бы вы поделиться своим полным конвейером?

Ответ №2:

Это связано с тем, что вы оцениваете var2 в var2 одной и той же переменной, должно быть var1, это опечатка? введите описание изображения здесь