Как: избежать $ (var) в Azure DevOps YAML

variables:
  buildSelected: '1.0.0.1234'

steps:
  - powershell: |
      Write-Host "Build Selected $(buildSelected)"
      Write-Host "Escaped '$(buildSelected)'"
    displayName: "Escape variable"

Я бы хотел, чтобы значение 1.0.0.1234 & '$ (buildSelected)' было напечатано вместо того, что печатается сейчас:

Build Selected 1.0.0.1234
Escaped '1.0.0.1234'

person Vyas Bharghava    schedule 04.03.2020    source источник
comment
Получили ли вы какое-нибудь сообщение об ошибке в этом процессе? Если вы добавите дополнительную задачу cmd для вывода значения BuildSelected, как будет выглядеть это значение?   -  person LoLance    schedule 04.03.2020
comment
@ LanceLi-MSFT Ошибок нет. Просто значение в аргументе присваивается КАК есть. Разъяснил вопрос дальше   -  person Vyas Bharghava    schedule 04.03.2020
comment
Вам может потребоваться несколько тестов, чтобы проверить, успешно ли значение $ (buildToDeploy) передано в скрипт ps. Попробуйте добавить в сценарий write-host $ newvalue и проверьте, пусто ли оно. В моем тесте -newValue '$(buildToDeploy)' может работать хорошо. Таким образом, вам не нужно использовать «$ # 36; (buildToDeploy)».   -  person LoLance    schedule 05.03.2020
comment
@ LanceLi-MSFT: Я хочу сохранить ЛИТЕРАЛЬНУЮ строку $ (buildToDeploy) в переменной (в группе переменных). Я не хочу сохранять значение $ (buildToDeploy), которое происходит сейчас.   -  person Vyas Bharghava    schedule 05.03.2020
comment
Можете ли вы поделиться минимальным примером своего файла yaml? Я пробовал использовать ваш скрипт ps, но получил одну ошибку The property 'value' cannot be found on this object. Verify that the property exists and can be set. Думаю, я что-то здесь пропустил.   -  person LoLance    schedule 10.03.2020
comment
@Lance Li-MSFT: Упростил вопрос   -  person Vyas Bharghava    schedule 26.03.2020


Ответы (1)


Извините, но я боюсь, что в Azure Devops нет возможности избежать переменной конвейера. Если переменная используется в этом формате $(var), она всегда будет заменена своим значением при использовании Write-Host для ее вывода.

Как я знаю в синтаксисе Powershell, для экранирования переменных можно использовать только символ `. Видеть:

Write-Host "Build Selected `$`(buildSelected)" 

Его вывод: Build Selected $(buildSelected)

Не уверен, что это то, что вам нужно, но экранирование переменных конвейера с полным $(var) не поддерживается. Azure Devops всегда заменяет его своим значением, если оно соответствует формату $(var).

person LoLance    schedule 30.03.2020
comment
Спасибо, Лэнс. - person Vyas Bharghava; 06.04.2020