Jenkins使用sshCommand带参数调用远程Linux服务器命令失败如何解决?
Jenkins sshCommand传递带参数命令的正确写法
现有代码的核心问题
- 变量引用语法错误:
sshCommand中command: ${comm}的写法不符合Groovy语法,${}插值语法必须包裹在双引号内,或者直接传入变量即可,不需要加${} - 参数拼接无转义:直接拼接
param1、param2如果包含空格、引号、shell特殊字符,会导致远程服务器解析命令出错
修正后的可用脚本
// 提前对参数做单引号转义,避免参数含特殊字符导致命令解析失败 param1 = param1.replace("'", "'\\''") param2 = param2.replace("'", "'\\''") // 用双引号做字符串插值构造完整命令,参数外层包单引号隔离 String comm = "java -jar *.jar -param '${param1}' -param '${param2}'" node { def remote = [:] remote.name = 'test' remote.host = '*' remote.user = '*' remote.password = '*' remote.allowAnyHosts = true stage('Remote SSH') { // 直接传入构造好的comm变量即可,不需要加${} sshCommand remote: remote, command: comm } }
调试建议
如果还是执行异常,可以在调用sshCommand前打印构造的命令,确认内容符合预期:
println "待执行的远程命令:${comm}"
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

