Ошибка JenkinsFile (сценарий конвейера): Синтаксическая ошибка: неразработанная строка в кавычках

#jenkins #jenkins-pipeline

#Дженкинс #дженкинс-конвейер

Вопрос:

—-Ниже приведен мой файл JenkinsFile (сценарий конвейера)——

 withCredentials([usernamePassword(credentialsId: 'test', usernameVariable: 'US
ER', passwordVariable: 'PWD')])
       {
sh "${gradle} -Prdsuser=${USER} -Prdspass='${PWD}'"
}
  

Здесь проблема с аргументом «PWD», который будет заменен на 2 ‘iblm98> # пример пароля (который имеет одинарную кавычку’)
Но когда я делаю сборку jenkins, получаю ошибку ниже из-за одинарной кавычки, присутствующей в пароле.
Как избежать этой одинарной кавычки в jenkinsfile (сценарий конвейера) и добиться успешной сборки?

script.sh : Синтаксическая ошибка: Незаконченная строка в кавычках

Заранее благодарю вас!

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

1. Если в вашем пароле нет пробелов, вы можете удалить одинарную кавычку aound '${PWD}'

Ответ №1:

Вы можете экранировать все одинарные кавычки в PWD с помощью String.replaceAll():

 withCredentials([usernamePassword(credentialsId: 'test', usernameVariable: 'USER', passwordVariable: 'PWD')]) {
    sh "${gradle} -Prdsuser=${USER} -Prdspass='${PWD.replaceAll(/'/, /\'/)}'"
}
  

В приведенном выше коде ${PWD.replaceAll(/'/, /\'/)} все ' вхождения экранируются с ' помощью .

Обратите внимание, что /'/ и /\' являются строками с косой чертой.

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

1. Vinicza благодарит вас за ответ. Я не уверен, как, но ниже сработало для меня. Тем не менее, мое значение PWD имеет одинарную кавычку, но когда я использую кавычку dobule с обратной косой чертой, это сработало. -Prdspass= «$ {PWD}»

2. Это работает, потому PWD что в настоящее время не содержит двойных кавычек. Та же проблема возникнет PWD='foo"bar' , например, с .