我正在尝试通过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
答案 0 :(得分:1)
您必须添加如下转义字符:-
curl ${nexusLink} | grep \"<a href=.*</a>\" | grep \"http\" | cut -d'>' -f3 |cut -d'/' -f1 > versionFile.xml