Jenkins Pipeline SSH删除指定外文件脚本编译报错求助
问题分析与修复方案
核心错误点
Jenkins Pipeline语法错误:
- 调用
sh步骤时用了错误格式:sh [""" ... """)],正确写法是直接传递字符串参数,不需要方括号,且引号配对错误(开头用三个双引号,结尾误用圆括号),这直接触发了Groovy编译失败。
- 调用
远程Shell命令问题:
!(api|inpinn|...)是Bash专属的扩展匹配语法,若远程主机默认Shell为sh则不支持该语法;yes | rm完全多余,给rm添加-f参数即可跳过删除确认;- 直接用
rm匹配排除项风险较高,建议用更可控的find命令执行删除操作。
修正后的Pipeline脚本
方案1:基于Bash扩展语法执行
sh """ ssh -T -o StrictHostKeyChecking=no myname@myip << 'EOF' bash -c ' cd /home/user/usr/share/nginx/html && rm -rf !(api|inpinn|outpinn|hp_frontend|email_inpinn) ' EOF """
方案2:基于find命令执行(兼容所有POSIX Shell,更安全)
sh """ ssh -T -o StrictHostKeyChecking=no myname@myip << 'EOF' find /home/user/usr/share/nginx/html -maxdepth 1 -mindepth 1 \ ! -name 'api' \ ! -name 'inpinn' \ ! -name 'outpinn' \ ! -name 'hp_frontend' \ ! -name 'email_inpinn' \ -exec rm -rf {} + EOF """
重要提示
- 测试阶段建议将
rm -rf替换为echo,先验证待删除的文件/目录是否正确,避免误删; - 确保远程主机的
myname用户对目标路径拥有足够的读写权限; StrictHostKeyChecking=no会关闭主机密钥验证,生产环境建议改为StrictHostKeyChecking=accept-new以提升安全性。
内容的提问来源于stack exchange,提问作者Subramanya P Hegde
相关产品推荐
相关产品推荐

