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



我在使用带有管道的Jenkinsfile时遇到了难题。

我有一个在docker容器中运行的主Jenkins和其他Jenkins从Jenkins,它们也是docker容器,有些是虚拟机(例如Windows 10)。

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

阶段名称"Build"执行maven工件的生成。我使用一个docker映像来构建我的项目(基于Maven和Java 9),而不需要在主机和容器之间共享任何卷。我使用stash/unstash函数传递源代码。我还使用了maven管道插件和选项withMaven(mavenLocalRepo: '')

我想在测试阶段将我在一个代理上构建的内容分享给其他代理,但在这一点上,存储库的存储似乎不起作用(上面写着:"没有文件可以存储"),我也无法部署到中央maven存储库(我使用Nexus),因为可能有许多并发构建,部署不安全。

我该如何解决这个问题?

管道示例:

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"){ ... }                
}
}
}
}
}

我发现了问题:

如果要从文件夹中导入完整内容,则stash命令的调用路径应包括路径末尾的斜杠(/)符号,否则它将被解释为文件,并且不导入任何内容。

例如,

有效表格

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

无效表单(存储失败):

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

最新更新