groovy函数中美元符号后的无效字符串体字符Shell脚本

时间:2019-06-07 09:29:00

标签: jenkins groovy jenkins-pipeline

我正在尝试通过jenkins-pipeline加载的groovy函数执行shell脚本,以从外部位置检索zip文件。我在函数中建立地址,并通过$将其传递到shell脚本中。但是我遇到语法错误,我不确定为什么。

我尝试将$转义,但不认为这是正确的方法,并且我的代码已从三重单引号(''')变为三重双引号(“”“),因此我可以将变量传入。< / p>

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:美元符号后的非法字符串体字符;    解决方案:在第28行第22列中,将文字符号“ \ $ 5”转义,或将值表达式“ $ {5}”放在方括号中。        卷曲“ $ {nexusLink}” | grep“” | grep“ http” |剪切-d'>'-f3 |剪切-d'/'-f1> versionFile.xml

1 个答案:

答案 0 :(得分:1)

您必须添加如下转义字符:-

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