Jenkins中不同Maven构建之间能否共享target等指定目录?
Jenkins不同Maven构建任务共享surefire报告文件的实现方案
有3种稳定可用的实现方法,可根据你的实际场景选择:
方案1:使用Jenkins内置制品归档功能(最推荐,无额外依赖)
无需修改服务器配置,仅需在任务配置中调整即可:- 打开第一个Maven应用的构建任务配置,找到「构建后操作」模块,添加「归档成品」项,在要归档的文件输入框中填写路径:
**/target/surefire-reports/*.xml,保存配置。该任务每次构建完成后,匹配到的xml报告都会被永久保存在本次构建的归档目录中。 - 打开第二个Maven应用的构建任务配置,先确认已安装
Copy Artifact插件(Jenkins主流预装插件,无的话在插件管理搜索安装即可),在构建步骤最开始添加「Copy artifacts from another project」项:- 项目名选择第一个应用的构建任务
- 构建版本选择「最新成功构建」即可
- 要复制的制品填写
**/surefire-reports/*.xml - 目标目录填写第二个应用读取报告文件的对应路径,保存即可。
- 打开第一个Maven应用的构建任务配置,找到「构建后操作」模块,添加「归档成品」项,在要归档的文件输入框中填写路径:
方案2:挂载本地共享目录
适合两个任务需要长期、高频共享大量文件的场景:- 在Jenkins运行这两个任务的agent节点上创建一个固定目录,给Jenkins运行用户开通读写权限,如果是多agent集群可以部署NFS共享盘挂载到所有对应agent的相同路径下。
- 第一个应用的构建任务末尾添加执行shell步骤,执行命令:
cp -r target/surefire-reports/*.xml 你的共享目录绝对路径/ - 第二个应用的构建任务开头添加执行shell步骤,执行命令:
cp -r 你的共享目录绝对路径/*.xml 报表工具读取文件的对应目录/
方案3:Pipeline任务直接传递文件
如果两个任务都是用Jenkins Pipeline编写的,可以用内置的stash/unstash能力直接传递文件,不需要额外配置:
上游第一个任务的Pipeline中,生成surefire报告后添加暂存步骤:
下游第二个任务的Pipeline中,需要用到报告前添加拉取步骤:stash name: 'surefire-xml-reports', includes: '**/target/surefire-reports/*.xml'unstash 'surefire-xml-reports'
内容的提问来源于stack exchange,提问作者sten
相关产品推荐
相关产品推荐

