我想执行以下脚本:
sh """#!/bin/bash -xe
source ${rcfile}
serverName=$(openstack server list --name openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname})
count=0
limit=6
while [ ! -z $serverName || $count -gt $limit ]
do
openstack server delete openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname}
count=$((count + 1))
sleep 10s
serverName=$(openstack server list --name openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname})
done
if [ $count -eq $limit ]; then
exit 1
fi
"""
字符串
提前感谢!
我尝试使用单引号和双引号,我知道字符串插值需要双引号
我知道我的rcfile源工作得很好,因为我之前运行过这个,它在不同的shell块中工作得很好:
sh """#!/bin/bash -xe
source ${rcfile}
openstack server delete openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname}
"""
型
同样,在运行并创建一个名为openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname}的示例后,单独运行这一部分也可以在shell块中工作,该示例成功地获取了构建号和当前主机名(我正在从jenkins管道阶段获取build_number和hostname)
sh """#!/bin/bash -xe
source ${rcfile}
openstack server list --name openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname}
"""
型
2条答案
按热度按时间gdrx4gfi1#
作为一种习惯,总是先将代码粘贴到ShellCheck.net中。这将保存您的时间和尴尬。
简单回答-使用
[[
而不是[
。字符串
或者也许
型
xurqigkl2#
我猜
rcfile
在你的Jenkinsfile中是一个Groovy变量,所以你使用双引号来进行字符串插值。如果是这种情况,你还需要注意你整个bash中以$
开头的任何单词,比如$(openstack
,$serverName
,$limit
,如果把它们放在双引号中,它们也会被插值。如果你整个bash,只有
rcfile
是Groovy变量,我建议你修改如下:字符串