Jenkins声明式流水线中Bash脚本无法接收第二个参数如何解决
问题根因与出错位置
问题出在telnetTest函数中获取serviceIP的步骤:调用sh方法返回标准输出时,默认会保留命令输出末尾的换行符,你没有对返回结果做去空白处理。
当你把带换行的serviceIP传入shell脚本时,换行符会直接截断命令参数,导致shell脚本只能识别到第一个参数(IP),第二个端口参数被换行分隔无法正常读取。
修复方案
在获取serviceIP的代码后调用.trim()方法,去除首尾的空白字符(包括换行、空格等)即可:
def serviceIP = sh ( returnStdout: true, script: "kubectl get svc -n ${namespace} | grep ${release} | awk '{print \$4}'" ).trim() // 新增trim()处理
其他可选优化点
- 流水线
environment块中的字符串变量建议用引号包裹,避免特殊字符解析异常:environment { NAMESPACE = "default" RELEASE = "test" PORT = "9040" } - shell脚本中可以增加参数校验逻辑,提前发现参数缺失问题:
#!/bin/bash if [ $# -ne 2 ];then echo "Usage: $0 <IP> <PORT>" exit 1 fi IP=$1 PORT=$2 exec 3> /dev/tcp/$IP/$PORT if [ $? -eq 0 ];then echo "PortOpen";else echo "PortClosed";fi
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

