Jenkins 管道中的 bash 脚本语法问题

问题描述 投票:0回答:1

我想执行以下脚本:

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}
"""

在获取并创建具有名称的实例后,单独运行这部分也可以在 shell 块中运行 openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname} 成功提取构建号和当前主机名(我从 jenkins 管道阶段提取构建号和主机名)

sh """#!/bin/bash -xe
source ${rcfile}
openstack server list --name openstack-cluster-smoketest-${env.BUILD_NUMBER}-${hostname}
"""
bash shell jenkins pipeline openstack
1个回答
0
投票

作为一种习惯,请始终先将代码粘贴到 ShellCheck.net 中。它通常会节省您的时间并避免尴尬。

简短回答 - 使用

[[
而不是
[

© www.soinside.com 2019 - 2024. All rights reserved.