好的,所以我只是在学习Jenkins中的管道,并且遇到了一个小问题。它正在将我的war文件构建在一个目录中,但尝试在另一个目录中构建docker映像,这当然会失败。
因此速记日志很好地描述了该问题:
[Pipeline] stage [Pipeline] { (build war) [Pipeline] node Running on Jenkins in /root/.jenkins/workspace/Wunderbaren@2 [Pipeline] { [Pipeline] stage [Pipeline] { (build dockerimage) [Pipeline] script [Pipeline] { [Pipeline] dir Running in /root/.jenkins/workspace/Wunderbaren/backend [Pipeline] {
Jenkins文件:
pipeline { agent any stages { stage('build war') { agent { docker { image 'gradle:latest' } } steps { sh 'gradle war -b backend/build.gradle' } } stage('build dockerimage') { steps { script { dir('backend/') { def image = docker.build("munhunger/wunderbaren") docker.withRegistry('https://registry.hub.docker.com', 'docker-hub-credentials') { image.push("${env.BUILD_NUMBER}") image.push("latest") } } } } } } }
我感到奇怪的是,我有一个几乎完全相同的配置的相似项目。只是文件夹名称和docker标签不同。而且这似乎在100%的情况下都有效,所以我对此感到非常迷茫!
原来您需要重用该节点:
stage('build war') { agent { docker { image 'gradle:latest' reuseNode true } } steps { sh 'gradle war -b backend/build.gradle' } }
从我在https://go.cloudbees.com/docs/cloudbees-documentation/use/reference/pipeline/中找到的文档中
redirectNode 一个布尔值,默认为false。如果为true,请在同一工作空间的管道顶层指定的节点中运行容器,而不要在新的节点上完全运行容器。此选项对docker和dockerfile有效,并且仅在单个阶段的代理上使用时才有效。