Команда Sed не работает в трубопроводе Jenkins - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть файл 'README.txt', который содержит строку -

"версия": "1.0.0-alpha-test.7"

Используя Jenkins Pipeline, я хочу заменить эту строку на

"version": "1.0.0-alpha-test.{BUILD_NUMBER}"

Следующая команда sed работает, когда я пробую ее на кластере linux

sed -i -E "s#(\"version\"[ ]*:[ ]*\".+alpha-test\.)[0-9]+\"#\1${BUILD_NUMBER}#g" README.txt

Эта же команда не работает с помощьютрубопровод Дженкинса.

Попытка выполнить следующий запрос, но он не работает -

sh """
sed -i -E "s|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g" README.txt
cat README.txt
"""

/ home / jenkins / workspace / test / test-pipeline @ tmp / durable-eb774fcf / script.sh: 3: /home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: синтаксическая ошибка: ")" неожиданная

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Лучше всего использовать вместо этого команду perl ...

script{

old_version = (sh (returnStdout: true, script:'''old_version=`cat version.cfg |grep VERSION=|cut -d "=" -f2`
echo $old_version''')).toString().trim()

sh """

     if [ "$old_version" != $new_version ]; then
        perl -pi -e "s,$old_version,$new_version,g" version.cfg
        ##-- git push operation --##
     fi  

"""

}
0 голосов
/ 10 сентября 2018

Я понятия не имею, что такое "конвейер Дженкинса", но я не вижу причин для того, чтобы ваш опубликованный скрипт sed не работал так, как вы описываете, поэтому я подозреваю, что ваша проблема находится где-то еще в вашем коде. Может быть, это как-то связано с этими sh """ и """ в начале и конце вашего файла (что, как я полагаю, связано с синтаксисом "конвейера Дженкинса", поскольку для сценария оболочки это не имеет смысла).

В любом случае, давайте очистим ваши кавычки, экранирование и выражения в скобках и посмотрим, поможет ли это:

$ cat README.txt
"version": "1.0.0-alpha-test.7"

$ BUILD_NUMBER=321

$ sed -E 's|("version" *: *".+alpha-test\.)[0-9]+|\1{BUILD_NUMBER}|g' README.txt
"version": "1.0.0-alpha-test.{BUILD_NUMBER}"

$ sed -E 's|("version" *: *".+alpha-test\.)[0-9]+|\1'"$BUILD_NUMBER"'|g' README.txt
"version": "1.0.0-alpha-test.321"

Я не могу сказать по вашему вопросу, хотите ли вы {BUILD_NUMBER} или $BUILD_NUMBER в выводе, поэтому я показал оба.

...