Stash无法存储子文件夹内myFiles求助:unstash后MyFolder为空
问题排查与解决方案
这问题我之前帮人排查过好几次,大概率是Ant glob的路径匹配规则没搞对——尤其是**这个通配符的用法!先给你拆解核心问题,再给正确的写法:
核心误区:路径匹配的层级问题
你要匹配的是所有名为MyFolder的子文件夹里的myFiles文件,而Ant glob默认的单*只能匹配当前层级的目录,MyFolder/myFiles这种写法只会匹配项目根目录下的MyFolder里的myFiles,深层目录里的MyFolder(比如src/MyFolder、docs/sub/MyFolder)根本不会被命中,自然stash不到文件,unstash后就是空文件夹。
正确的Ant glob写法
要匹配任意层级下的MyFolder文件夹中的myFiles,必须用**通配符(表示零或多个目录层级),正确的匹配规则是:
**/MyFolder/myFiles
**:会遍历项目中所有目录层级,不管MyFolder在哪个深度都能找到MyFolder/myFiles:精确匹配该文件夹下的目标文件
额外排查点
如果用了上面的写法还是不行,再检查这几个地方:
- 基准目录是否正确:如果你的stash操作指定了
basedir参数,路径是相对于这个基准目录的,要确保**/MyFolder/myFiles是相对于基准目录的正确路径 - 排除规则冲突:如果同时设置了
excludes参数,有没有不小心把**/MyFolder/myFiles排除掉了?排除规则的优先级有时候会覆盖包含规则 - 文件系统大小写:虽然你说确认过大小写,但Ant glob在类Unix系统下是严格区分大小写的,再核对一遍文件名和匹配规则的大小写完全一致
示例操作(以Jenkins stash为例)
如果是Jenkins环境,正确的stash命令应该是:
stash includes: '**/MyFolder/myFiles', name: 'my-target-stash'
unstash时直接用:
unstash 'my-target-stash'
这样就能把所有层级MyFolder里的myFiles都恢复到原目录结构中,不会出现空文件夹的问题了。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

