Я пытаюсь проверить значение переменной, установленной во время работы.
Я предполагаю, что это получает пустое значение. Моя попытка:
variables:
- name: MailPass
${{ if eq( variables['SendMail'], 'Yes' ) }}:
value: "Si"
${{ else }}:
value: "No"
SendMail — это переменная, устанавливаемая при запуске (в диалоговом окне запуска в веб-сайте Azure Devops), а MailPass всегда получает значение «Нет», независимо от того, какое значение я установил для переменной SendMail.
Каков правильный синтаксис для этого сравнения? (Я также пробовал синтаксис variables.SendMail
, но результат тот же)
ты прав. Я использовал строку, потому что переменные пользовательского интерфейса не имеют типа, но использование параметров имеет полный смысл.
Именно, параметры строго типизированы, так что это само по себе является веской причиной для их использования.
Боюсь, что мы не сможем использовать выражение 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"
В этом случае вы также можете установить значение параметра во время выполнения.
Например:
Использование параметров вместо переменных решило мои проблемы. Замечательное решение ;)
Учитывая, что вы используете конвейер YAML, я бы рекомендовал использовать в конвейерах параметры вместо переменных, как рекомендовал Кевин. Но, честно говоря, я бы использовал параметр
boolean
, который будет отображаться в виде флажка при постановке в очередь новой сборки, а не параметрstring
.