Если я хочу поставить в очередь сборку с помощью AzureDevops с перезаписанными переменными, я должен передать строку параметров:
{ "definition" : { "id" : [BUILD_ID] },
"parameters" : str(variables_to_overwrite)
}
, где переменные_to_overwrite - это словарь, подобный следующему:
variables_to_overwrite = {
"list_1" : str( ['A', 'B', 'C'] )
"list_2" : str( ['D', 'E'] )
}
Если я не приведу эти списки в виде строк, сборка не будет помещена в очередь. Я распечатываю параметры перед постановкой в очередь, и они выглядят правильно:
{'definition': {'id': [BUILD_ID},
'parameters': '{\'list_1\': "\'[\'A\', \'B\', \'C\']\'", \'list_2\': "\'[\'D\', \'E\']\'}'
, но когда у меня естьbuild выводит на экран аргументы, которые он видит, он печатает:
'--list_1', "'['A", "B',", "'C"]'", '--list_2', "'['D", "E']'"
Как вы можете видеть, одинарные и двойные кавычки смешались , что означает программы, которые разбирают args don 'Это не два аргумента, а семь!
Я попытался принудительно заменить все двойные кавычки одинарными, но когда я это сделаю, сборка не будет помещена в очередь.Я даже попытался переписать его так:
{'definition': {'id': [BUILD_ID},
'parameters': '{\'list_1\': \'[\'A\', \'B\', \'C\']\', \'list_2\': \'[\'D\', \'E\']\'}'
Но когда я вернул результат сборки, он сделал то же самое, добавив двойные кавычки, смешанные с одинарными кавычками (точно так же, какранее описано).
Как я могу предотвратить уничтожение DevOps парных котировок в таких вещах, как списки и дикты, которые передаются в качестве параметров? Я пробовал каждую перестановку, которую только мог придумать, в том числе и вручнуюупаковка в кавычки, замена кавычек, использование json.dumps и т. д. Ничего не работает.Единственный способ получить сборку в очередь - это передать строку, и независимо от того, какие входные данные для кавычек она получает, экранированные или нет, devOps проходит и заменяет все кавычки шаблоном single-quote, double-quote
.