Дженкинс жалуется на синтаксис в строке, которую я не изменил - PullRequest
0 голосов
/ 02 января 2019

У меня был вызов curl на одном из этапов конвейера, который работал нормально:

stage("deploy") {
        when {
                        environment ignoreCase: true, name: "DEPLOY_TO", value: "staging"
                }
            steps {
                // copy files from dev to  server
                sh """rsync...

                #....
                    /bin/cp .....


                rm -Rf /tmp/${env.SITEID}docs/
                # clear the  caches
               curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\""""

Проблема началась, когда я добавил условие if для этого вызова curl в случае сбоя вызова curl:

stage("deploy") {
        when {
                        environment ignoreCase: true, name: "DEPLOY_TO", value: "staging"
                }
            steps {
                // copy files from dev to  server
                sh """rsync...

                #....
                    /bin/cp .....


                rm -Rf /tmp/${env.SITEID}docs/
                # clear the  caches
                if [[ $( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi"""

Ошибка теперь указывает на строку кода rm -Rf /tmp/${env.SITEID}docs/, но путаница состоит в том, что я даже не изменил эту строку кода!

Полученное сообщение об ошибке -следующее:

ERROR: WorkflowScript: 119: illegal string body character after dollar sign;
   solution: either escape a literal dollar sign "\$5" or bracket the value expression "${5}" @ line 119, column 41.
         rm -Rf /tmp/${env.SITEID}docs/

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 января 2019

Проблема по-прежнему в строке, которую вы изменили:

if [[ $( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi

Хотя строка и столбец вывода неверны, тело сообщения является точным. Обратите внимание на сообщение:

недопустимый символ тела строки после знака доллара;
решение: либо экранируйте буквальный знак доллара "\ $ 5", либо заключите в скобки выражение значения "$ {5}"

Это из-за части с $( curl, где этот знак доллара интерпретируется как обозначение переменной Groovy и / или Jenkins, интерполированной внутри строки. Два предложения, приведенные в ошибке, основаны на том, имели ли вы в виду это или нет. Если вы это имели в виду, то вам нужно заключить в скобки это как:

${( curl...}

но, так как вы не имели в виду это и вместо этого хотели интерполяцию переменных оболочки внутри строки, вам нужно первое предложение и экранировать $.

Ваша полученная строка выглядит как:

if [[ \$( curl -sS -X POST \"http://www.xxxxxxxx.net/myscript.php?api_key=sdfsdfsdfe&site_id=088\" | jq -r .debug_info.id_info) != \" cache cleared successfuly\" ]]; then exit 255; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...