我在使用带有管道的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"