Недопустимый символ тела строки после знака доллара. Сценарий оболочки из заводной функции - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь выполнить сценарий оболочки из функции groovy, загруженной jenkins-pipe, для извлечения zip-файла из внешнего местоположения.Я строю адрес в функции и передаю его в скрипт оболочки через $.Но я получаю синтаксическую ошибку и не знаю почему.

Я пытался избежать $, но не думаю, что это правильный подход, и мой код был покрыт от тройных одинарных кавычек ('' ') до тройных двойных ("" "), чтобы я мог передать переменнуюв.

def DownloadBaseLineFromNexus(groupID, artifactID){
    //add code for this method
    def nexusLink = "${GetNexusLink()}/${GetNexusProdRepo()}/${groupID}/${artifactID}/"

    sh """
    # retrieving all available version  from release repo to versionFile.xml
    curl ${nexusLink} | grep "<a href=.*</a>" | grep "http" | cut -d'>' -f3 |cut -d'/' -f1 > versionFile.xml
    # creating array from versionFile.xml
    fileItemString=$(cat versionFile.xml |tr "\n" " ")
    fileItemArray=($fileItemString)
    # Finding maximum of array element
    maxValue=`printf "%d\n" "${fileItemArray[@]}" | sort -rn | head -1`
    # Download latest version artifact from nexus
    curl -o ${(artifactID)}.zip ${(nexusLink)}/${(artifactID)}-$maxValue.zip
    # Unzip the tool
    unzip ${(artifactID)}.zip
    """   
}

результаты, которые я получаю:

Script1.groovy: 28: недопустимый символ тела строки после знака доллара; решение: либо экранировать буквальный знак доллара "\ $ 5", либозаключите в скобки значение выражения "$ {5}" @ строка 28, столбец 22. curl "$ {nexusLink}" | grep "" | grep "http" | cut -d '>' -f3 | cut -d '/' -f1> versionFile.xml

1 Ответ

1 голос
/ 07 июня 2019

Вы должны добавить escape-символы, как показано ниже: -

curl ${nexusLink} | grep \"<a href=.*</a>\" | grep \"http\" | cut -d'>' -f3 |cut -d'/' -f1 > versionFile.xml
...