将本地Maven存储库共享给Jenkins Pipeline中的代理

我在使用Pipeline的Jenkins文件遇到了难题。

我有一个在docker集装箱和其他Jenkins奴隶,也是docker集装箱和一些虚拟机(例如,Windows 10)运行的jenkins大师。

我在Git中作为第一阶段和后续阶段执行代码签出。

舞台名称“Build”执行Maven工件的生成。 我使用一个docker镜像构build我的项目(基于Maven和Java 9), 无需在主机和容器之间共享任何卷。 我使用stash / unstash函数传递源代码。我也使用maven-pipeline插件和withMaven(mavenLocalRepo: '')

我想在testing阶段将我在一个代理上构build的代码分享给其他代理,但是看起来在这一点上,存储库的存储不起作用(它说:'没有文件存储'),我不能部署到一个中央Maven仓库(我使用Nexus),因为有许多可能的并发构build,部署可能是不安全的。

我该如何解决这个问题?

pipe道示例:

 pipeline{ agent none stages{ stage('Checkout Repository'){ agent { node { label 'master' } } steps{ checkout scm stash includes: 'project/', name 'project' } } stage('Build'){ agent { node { label 'docker-app-builder' } } steps{ unstash "project" withMaven(mavenLocalRepo: ".repository"){ sh 'mvn clean install' } stash includes: ".repository", name "repository" } } } stage("Test){ steps{ parallel "docker slave": { node("docker-app-tester"){ unstash "repository" unstash "project" withMaven(mavenLocalRepo: ".repository"){ ... } } }, "Windows Slave": { node("windows-tester"){ unstash "repository" unstash "project" withMaven(mavenLocalRepo: ".repository"){ ... } } } } } } 

我发现了这个问题:

如果要从文件夹中导入完整内容,则需要使用包含path末尾的斜线( / )符号的path调用stash命令,否则将其解释为文件,并且不导入任何内容。

例如,

有效表格

 stash includes: ".repository/", name "repository" 

无效的表单 (存储失败):

 stash includes: ".repository", name "repository"