У меня есть файл json со следующим содержимым:
"containerDefinitions": [
{
"image": "***.dkr.ecr.us-east-1.amazonaws.com/xyz"
}
]
Теперь я хочу заменить URL-адрес изображения новым значением. Итак, в моем файле groovy со сценарием jenkins я сохраняю это существующее значение URL-адреса под некоторой переменной, а затем ввожу новое значение URL-адреса, к которому добавляется номер сборки. Итак, я пытаюсь сделать следующее:
newimageurl = "\"***.dkr.ecr.us-east-1.amazonaws.com/xyz:v_$BUILD_NUMBER\""
oldimageurl = "\"***.dkr.ecr.us-east-1.amazonaws.com/xyz\""
sed -i -e 's#'"$oldimageurl"'#'"$newimageurl"'#' ./myfile.json
Но это заканчивается ошибкой как для синтаксиса для newimageurl для v_$BUILD_NUMBER
, так и для команды sed.
Как это решить?
спасибо мувичель. Но где вы имели в виду экранирование $ char.
$BUILD_NUMBER
находится на карте объектов env, поэтому он должен быть env.BUILD_NUMBER
. Кроме того, все они интерполируются внутри строки, поэтому вам, вероятно, нужно заключить их, например, ${env.BUILD_NUMBER}
, ${oldimageurl}
и т. д. После этого, вероятно, возникнет еще пара проблем, но это поможет вам начать работу в правильном направлении.
При определении строковой переменной в groovy вам не нужно добавлять двойные кавычки. Кроме того, у вас есть ошибка в интерполяции. Вы будете делать:
newimageurl = "***.dkr.ecr.us-east-1.amazonaws.com/xyz:v_${BUILD_NUMBER}"
oldimageurl = "***.dkr.ecr.us-east-1.amazonaws.com/xyz"
В вашей команде sed
также (также вы должны поместить ее внутри команды sh
):
sh """
sed -i -e 's#${oldimageurl}#${newimageurl}#' ./myfile.json
"""
Вероятно, вам нужно экранировать символ
$
, иначе он будет соответствовать концу строки.