Проблема с вашим кодом в том, что вы не избегаете двойных кавычек в команде.Для Groovy строка, которая передается команде sh
, заканчивается непосредственно перед Content-Type
, если вы не экранируете двойные кавычки с обратной косой чертой.
Также вам нужно избегать знаков доллара, которые вы хотите интерпретировать с помощью Bash.Строковая интерполяция Groovy использует тот же синтаксис, что и Bash.
Я пытался исправить вашу команду.Надеюсь, я нашел все проблемы:
sh "curl -H \"Content-Type: application/json\" -H \"X-Octopus-ApiKey: \"'${APIKey}'\" -d '{\"ReleaseId\":\"'\$(curl -H \"Content-Type: application/json\" -H \"X-Octopus-ApiKey: \"'${APIKey}'\" -d '{\"version\":\"'${v}'\", \"ProjectId\":\"'${projectId}'\", \"Environment-Id\":\"'${envId}'\"}' http://xxxxx | grep '\"Id\":' | head -1 | cut -d ':' -f 2 | cut -d '\"' -f 2)'\", \"EnvironmentId\":\"'${envId}'\"}' http://xxxxxx"
Кстати, я положил переменные из groovy в фигурные скобки.В этом нет необходимости, но я считаю, что это хорошая практика.