将本地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"