Sed не заменяет в jenkins при использовании переменной

#shell #jenkins #sed

#оболочка #дженкинс #sed

Вопрос:

Я запускаю сценарии оболочки в jenkins, как показано ниже (измените на формат groovy). Но когда я пытаюсь запустить в jenkins, он не заменяет значение для port_https. Однако, когда я попытался запустить вручную, это изменило значение как экспортированное.

  sh "find ./ -type f -name '*.yml' -exec sed -i -e "s/url_protocol: http$/url_protocol: https/g" {} \ ;"sh "find ./ -type f -name '*.yml' -exec sed -i -e 's/protocol: "http"$/protocol: "https"/g' {} \;"sh "export abc_port="$(find ./pdf/myInventory/dyn_conf/group_vars/abc1/vars.yml -exec grep abc_solution_portbase: {} \; | cut -d: -f2)" ; export port_https=$(($abc_port   81)) ; export port="$(find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sh -c 'grep -A 3 -e def_nei_abc_host {} | grep -e port' \; | cut -d: -f2)" ; find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e 's/port:${port}/port: ""${port_https}""/g' {} \;"
  

Вывод консоли показывает правильное экспортированное значение для каждого параметра.

Обновить:

Строка, в которой возникла проблема

 find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e 's/port: "24080"$/port: 24081/g' '{}' ';'
  

Я пытаюсь сделать так, чтобы порт стал

 port: "24081"
  

Как вы сказали, я меняю одинарную кавычку на двойные кавычки, как показано ниже

 find ./pdf/myInventory/dyn_conf/group_vars/def1/vars.yml -exec sed -i -e "s/port:${port}$/port: "${port_https}"/g" {} \;"
  

Но когда я пытаюсь запустить с помощью jenkins, двойные кавычки для порта не распознаются. и становится

 port: 24081
  

Комментарии:

1. Добро пожаловать в StackOverflow. Пожалуйста, начните с минимального примера, как для самостоятельного тестирования, так и для публикации здесь. Это невероятно сложно понять.

2. Я предполагаю, что причина в том, что в одинарных кавычках отсутствует интерполяция строк. Вместо этого используйте двойные кавычки.

3. @StephenKing я обновляю свои вопросы