#azure-devops #azure-pipelines #azure-powershell #azure-cli
#azure-devops #azure-конвейеры #azure-powershell #azure-cli
Вопрос:
Я пытаюсь обновить переменную Azure pipeline group из скрипта PowerShell, используя az cli.
У меня есть команда, обновляющая переменную, но изменяющая json и удаляющая все кавычки («)
поэтому вместо обновления переменной с {"a": "a"}
на {"a": "b"}
он обновляет его до {a: b}
Я выполняю следующую команду
$json = ConvertTo-Json $a -Compress
Write-Host $json
az pipelines variable-group variable update --group-id 236 --name MyJson --detect true --secret false --value $json
Выход из write-host
{"a": "b"}
Вывод az pipelines variable-group variable update
{
"MyJson": {
"isSecret": null,
"value": "{a:b}"
}
}
Что я делаю не так и как я могу заставить его обновляться без изменения JSON?
Ответ №1:
Все переменные хранятся в виде строк и могут изменяться, и это уже означает строку, когда она заключена в двойные кавычки. Таким образом, он удаляет все кавычки внутри. Если вы хотите, чтобы кавычки также сохранялись в качестве значения, тогда вам нужно передать их следующим образом:
{"a":"b"}
Или просто используйте одинарные кавычки:
'{"a":"b"}'
Наконец, это будет выглядеть так:
Нет необходимости сохранять двойные кавычки в качестве значения. Поэтому я не рекомендую вам делать это без какой-либо особой причины.
Комментарии:
1. так интересно, что когда вы делаете это с помощью var, введенный var
' '
не работает. Поэтому мне пришлось выполнить замену и заменить все"
на"
, а затем передать его команде
Ответ №2:
Таким образом, в то время как @charles работает при передаче данных прямо в команду подобным образом, мы используем переменные.
Хотя я понимаю, что здесь происходит, все же думаю, что команда az могла бы справиться с этим лучше.
Итак, чтобы заставить это работать, мне пришлось выполнить замену строки и заменить все "
на "
Раздражает, что это нужно сделать, но это работает, поэтому мои окончательные команды выглядят так:
$new_json = $json.replace("`"", "`"")
az pipelines variable-group variable update --group-id $(VarGroupId) --name var_name --detect true --secret false --value $new_json
Комментарии:
1. Почему бы не принять мой ответ вместо добавления другого ответа, когда вы просто копируете решение ?!
2. Строка json должна содержать обратную косую черту, а не просто экранировать json, чтобы вписаться в строку. Ответы разные.