Проверьте переменные запуска в операторе if

Я пытаюсь проверить значение переменной, установленной во время работы.

Я предполагаю, что это получает пустое значение. Моя попытка:

variables:
- name: MailPass
  ${{ if eq( variables['SendMail'], 'Yes' ) }}:
    value: "Si"
  ${{ else }}:
    value: "No"

SendMail — это переменная, устанавливаемая при запуске (в диалоговом окне запуска в веб-сайте Azure Devops), а MailPass всегда получает значение «Нет», независимо от того, какое значение я установил для переменной SendMail.

Каков правильный синтаксис для этого сравнения? (Я также пробовал синтаксис variables.SendMail, но результат тот же)

Учитывая, что вы используете конвейер YAML, я бы рекомендовал использовать в конвейерах параметры вместо переменных, как рекомендовал Кевин. Но, честно говоря, я бы использовал параметр boolean, который будет отображаться в виде флажка при постановке в очередь новой сборки, а не параметр string.

Rui Jarimba 16.07.2024 12:19

ты прав. Я использовал строку, потому что переменные пользовательского интерфейса не имеют типа, но использование параметров имеет полный смысл.

toscanelli 16.07.2024 15:12

Именно, параметры строго типизированы, так что это само по себе является веской причиной для их использования.

Rui Jarimba 16.07.2024 15:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Боюсь, что мы не сможем использовать выражение if для проверки переменной, установленной в пользовательском интерфейсе Pipeline.

Когда вы устанавливаете переменную в пользовательском интерфейсе Pipeline, она будет расширяться во время выполнения. Но выражение if будет оцениваться во время компиляции.

В этом случае переменная передаст пустое значение в выражение If.

В качестве обходного пути мы можем использовать сценарий для использования команды регистрации для установки переменной на основе значения переменной.

Вот пример:

steps:

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: |
      if (  "$(SendMail)" -eq "yes" )
      {
        echo "##vso[task.setvariable variable=MailPass;]Si"
      }
      else
      {
        echo "##vso[task.setvariable variable=MailPass;]No"
      }
- powershell: echo $(MailPass)

Результат:

Или вы можете рассмотреть возможность использования параметров для установки значения SendMail. Значение параметра можно использовать в выражении If. Обратитесь к этому документу: Параметры времени выполнения

Вот пример:

parameters:
- name: SendMail
  type: string
  default: yes

variables:
- name: MailPass
  ${{ if eq( parameters.SendMail, 'Yes' ) }}:
    value: "Si"
  ${{ else }}:
    value: "No"

В этом случае вы также можете установить значение параметра во время выполнения.

Например:

Использование параметров вместо переменных решило мои проблемы. Замечательное решение ;)

toscanelli 16.07.2024 13:27

Другие вопросы по теме

Агент Mac для Azure Pipeline, размещенный в MS: задача CopyFiles занимает очень много времени
Невозможно установить настроенную версию продукта в конвейере Azure DevOps
Azure Pipelines: push был отклонен, поскольку одна или несколько фиксаций содержат адрес электронной почты автора, который не соответствует шаблонам, указанным в политике
Как выполнить git diff в конвейере Azure DevOps CI с несколькими репозиториями
Размещенные агенты Azure Pipelines были обновлены и теперь содержат пакет SDK/среды выполнения .Net 5.x вместе со старой версией .Net Core
Azure Devops // Подключение к службе // Terraform // Конвейер Yaml -> Ошибка сборки
Срок службы .NET Core SDK/среды выполнения 2.2 и 3.0 истек (EOL) и удален из всех размещенных агентов
Почему мои условия не работают должным образом в конвейерах YAML Azure DevOps при использовании условий на основе динамической переменной?
Выходная переменная из обычного задания конвейера Azure не расширяется в задании развертывания
Мой конвейер Azure не запускается, несмотря на выполнение условий