如何在Jenkins中将多份文件合并到同一个zipFile中?
解决Jenkins打包多个目录文件到同一Zip的问题
问题原因
你当前的写法会报错,是因为Jenkins的zip步骤默认是创建新压缩包,第一次执行已经生成了myZip.zip,第二次执行时发现文件已存在,就会抛出冲突错误。
可行解决方案
方案1:使用append参数追加文件
修改你的代码,给后续的zip步骤加上append: true参数,这样就会把新文件追加到已有的压缩包里,而不是重新创建:
// 第一次创建压缩包,加入someLocation1下的file1.py相关文件 zip zipFile: "myZip.zip", archive: true, dir: './someLocation1', glob: 'file1.py*' // 追加someLocation2下的file2.py相关文件到已有压缩包 zip zipFile: "myZip.zip", archive: true, dir: './someLocation2', glob: 'file2.py*', append: true // 追加someLocation3下的所有文件(注意glob用**/*匹配所有文件/子目录,空值不会匹配任何内容) zip zipFile: "myZip.zip", archive: true, dir: './someLocation3', glob: '**/*', append: true
方案2:先统一收集文件到临时目录,再一次性打包
这种方式更直观,也能避免多次调用zip的潜在问题:
// 创建临时目录 sh 'mkdir -p ./temp_package' // 复制需要的文件到临时目录 sh ''' cp ./someLocation1/file1.py* ./temp_package/ cp ./someLocation2/file2.py* ./temp_package/ cp -r ./someLocation3/* ./temp_package/ ''' // 一次性打包临时目录下的所有内容 zip zipFile: "myZip.zip", archive: true, dir: './temp_package', glob: '**/*' // 清理临时目录 sh 'rm -rf ./temp_package'
思路分析
你原本的思路方向是对的——要把不同目录的指定文件打包到同一压缩包,但忽略了Jenkinszip步骤的默认行为:每次调用默认是创建新文件,而非追加。只要调整为追加模式,或者先统一收集文件再打包,就能解决问题。
内容的提问来源于stack exchange,提问作者pragmatic learner
相关产品推荐
相关产品推荐

