我在码头用的是詹金斯。/var/jenkins_home
挂载在我主机上的/var/jenkins-data
上。我的Jenkins可以执行docker命令(安装套接字),并且我已经安装了git插件和管道插件。
现在我有一个名为test
的管道作业和以下管道:
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'master', url: 'https://github.com/lvthillo/maven-hello-world.git'
}
}
stage('Build in Docker') {
agent {
docker {
image 'maven:3.5.2'
args '-v /var/jenkins_home/workspace/test:/opt/maven -w /opt/maven'
}
}
steps {
sh 'pwd'
sh 'mvn -v'
sh 'mvn clean install'
}
}
}
}
我想要实现的是从github克隆我的公共repo。这是可行的。在下一步中,我想启动一个docker容器( maven ),打印当前目录,maven版本,并执行全新安装。
这3个命令的输出为:
[test@2] Running shell script
+ pwd
/var/jenkins_home/workspace/test@2
[Pipeline] sh
[test@2] Running shell script
+ mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /usr/share/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "4.4.86-boot2docker", arch: "amd64", family: "unix"
[Pipeline] sh
[test@2] Running shell script
+ mvn clean install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.179 s
[INFO] Finished at: 2018-01-12T12:12:00Z
[INFO] Final Memory: 5M/31M
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/var/jenkins_home/workspace/test@2). Please verify you invoked Maven from the correct directory. -> [Help 1]
这似乎是因为maven没有安装在我的主机上,所以它是从容器内部执行的,但它突然创建了一个新的工作区(@2
),而不是使用我从中克隆存储库的现有工作区。我不想立即在我的容器中克隆存储库,因为我想要多个阶段,每个阶段都有不同的容器,但都在我的工作区中的git存储库上执行。
我做错了什么,或者我如何解决这个问题?我在想可能是因为代理步骤的原因。我的第一步可以在任何代理(任何从属)上运行,停靠步骤将在停靠容器中运行,但当然必须在执行git clone
的从als上运行。
发布于 2018-01-12 21:46:15
pipeline {
agent any
stages {
stage('Clone') {
steps {
git branch: 'master', url: 'https://github.com/lvthillo/maven-hello-world.git'
stash name:'scm', includes:'*'
}
}
stage('Build in Docker') {
steps {
unstash 'scm'
script{
docker.image('maven:3.5.2').inside{
sh 'pwd'
sh 'mvn -v'
sh 'mvn clean install'
}
}
}
}
}
}
即使在多节点设置的情况下,也可以使用此管道。Docker plugin将您的工作区挂载为docker工作区too.Hence,除非它们位于工作区之外,否则无需挂载任何卷。
发布于 2018-03-23 13:19:09
谢谢,前面的解决方案对我很有效。我的节点容器版本和${PWD}作为参数
stage('Build Solution') {
agent {
docker {
image 'node:6-alpine'
args '-v ${PWD}:/usr/src/app -w /usr/src/app'
reuseNode true
}
}
steps {
sh 'npm install'
}
}
发布于 2018-01-12 20:37:13
我的最后一个解释是帮助自己解决问题:这个text帮助我解决了它。我必须确保我的管道中的所有步骤都使用与我执行git克隆的初始步骤相同的代理:
Addit reuseNode
true解决了这个问题:
stage('Build in Docker') {
agent {
docker {
image 'maven:3.5.2'
args '-v /var/jenkins_home/workspace/test:/opt/maven -w /opt/maven'
reuseNode true
}
}
https://stackoverflow.com/questions/48226183
复制相似问题