我的管道在Jenkinsfile的sh“”“元素处失败。知道哪里出错了吗?
.
错误消息是:
stage('Install dependencies') {
when { expression { return params.dependencies } } }
steps {
sh """
apt-get update
apt-get install -y openssh-server net-tools inetutils-ping python-pip rubygems
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
gem install serverspec pygmy
"""
}
}
答案 0 :(得分:7)
如果要使用groovy的字符串插值,可以保留双引号,但必须在子外壳表达式中转义美元符号,因为groovy不知道如何处理美元符号后的圆括号:
更改:
$(lsb_release -cs)
收件人:
\$(lsb_release -cs)
我注意到错误消息指示错误的行。就我而言:
sh """
echo "message: ${env.MESSAGE}" # <-- error message points here
pwd
echo "ls: $(ls)" <-- this line has the problem
"""
在错误消息指示的行之后的 中查找第一个美元符号。
答案 1 :(得分:1)
用双引号"""
替换双引号'''
。
sh '''
apt-get update
//...
'''
只要Groovy在双引号中看到$
,就会将此字符串视为GString
并使用string interpolation。但是,在您的情况下,插值的上下文中不使用字符$
,它会失败。另外,您可以转义\$
,但是切换到单引号字符串更有意义。