Jenkinsfile stash时如何排除父目录仅保留子目录及内部文件?
Jenkins stash 仅保留demo目录层级的解决方案
问题根因
Jenkins的stash步骤默认会保留文件相对于执行stash操作时工作目录的完整路径结构。你之前的两次尝试均是在项目根目录执行stash,匹配的路径本身包含build/前缀,因此存储的内容自然会保留build这一层父目录,不符合预期。
最优解决方案(最推荐)
通过dir步骤切换工作目录到build目录后再执行stash,此时stash的根路径为build,仅匹配demo/**即可保留demo为最上层目录:
dir('build') { stash includes: 'demo/**', name: 'demoBuild' }
后续在任意位置执行unstash 'demoBuild'时,会直接在当前工作目录下生成demo目录及其完整子内容,不会携带上层build目录。
替代方案(适用于无法切换工作目录的场景)
如果有特殊限制不能切换工作目录,可以先将demo目录移动到当前工作根目录再执行stash:
// 移动demo目录到根目录 sh 'mv build/demo ./demo' // 执行stash stash includes: 'demo/**', name: 'demoBuild' // 可选:如果需要保留原目录结构,执行完stash后移动回去 sh 'mv ./demo build/demo'
内容的提问来源于stack exchange,提问作者Galileo123
相关产品推荐
相关产品推荐

