def removePath = "/home/ljx/*jar"
echo removePath
sh "/bin/rm -f ${removePath}"
执行结果
/home/ljx/*jar
/bin/rm -f '/home/ljx/*jar'
最终结果导致执行无效,求解决方案,尝试过 eval
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Jenkins Pipeline脚本中,你遇到的问题是因为通配符*
在双引号字符串中没有被正确展开。当你直接将含有通配符的路径赋值给变量并在shell命令中使用时,Jenkins不会自动展开这个通配符。为了解决这个问题,你可以使用Groovy的文件查找功能来获取匹配的所有文件路径,然后在shell命令中遍历这些路径进行删除。下面是一个可能的解决方案:
def removePath = "/home/ljx/*.jar"
echo "Pattern: ${removePath}"
// 使用findFiles方法找到匹配的文件
def filesToDelete = findFiles(glob: removePath)
// 检查是否找到文件
if (filesToDelete) {
// 遍历找到的文件并执行删除操作
filesToDelete.each { file ->
sh(script: "/bin/rm -f '${file.path}'")
}
} else {
echo "No files found matching the pattern."
}
这段脚本首先定义了要删除的文件模式(注意这里使用了.jar
而不是*jar
,因为通常我们指的是所有.jar
文件)。然后,它使用findFiles
步骤来查找与模式匹配的所有文件,并将结果存储在一个列表中。如果找到了文件,就遍历这个列表,对每个文件执行删除操作;如果没有找到文件,则输出一条消息告知没有找到匹配的文件。
这样处理可以确保通配符正确地在Groovy层面展开,并且能够安全地处理文件名中可能包含特殊字符的情况。