在带有卷装入的代码段之后,在$JENKINS_HOME/workspace/<project-name>/?
(问号)下而不是在$HOME/.m2/
下创建maven依赖项
请注意,settings.xml镜像到我们的内部资源库。有关如何安装的说明直接取自jenkins.io
任何人都知道为什么会这样吗?
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /tmp/jenkins/.m2:/root/.m2:rw,z'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean install -s settings.xml'
}
}
}
}
这不像独立使用Docker那样简单。我在运行构建的Jenkins从属服务器上创建了/var/jenkins/.m2目录。确保新目录具有775权限(尽管可能不是必需的),并且还将所有者更改为与“ / var / opt / slave / workspace / pipeline_test”相同(根据以下日志获取此路径)< / p>
$ docker login -u dcr-login -p ******** https:// nexus.corp.zenmonics.com:8449
Login Succeeded
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . nexus.corp.zenmonics.com:8449/maven:3-alpine
.
[Pipeline] withDockerContainer
cucj1sb3 does not seem to be running inside a container
$ docker run -t -d -u 1002:1002 -v /tmp/jenkins/.m2:/root/.m2:rw,z -w
/var/opt/slave/workspace/pipeline_test -v /var/opt/slave/workspace/pipeline_test:/var/opt/slave/workspace/pipeline_test:rw,z -v /var/opt/slave/workspace/pipeline_test@tmp:/var/opt/slave/workspace/pipeline_test@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** nexus.corp.zenmonics.com:8449/maven:3-alpine cat
$ docker top c7282468dbb6952aadbe4bb495757e7047122b179c81516645ba23759b78c366 -eo pid,comm
关于Docker Hub(https://hub.docker.com/_/maven)上官方maven映像的声明使我感到卷挂载已更新
要创建预打包的存储库,请使用以下命令创建pom.xml: 您需要的依赖项,并在Dockerfile中使用它。 /usr/share/maven/ref/settings-docker.xml是一个设置文件 将本地存储库更改为/ usr / share / maven / ref / repository,但是 您可以使用自己的设置文件,只要它使用 / usr / share / maven / ref / repository作为本地存储库。
答案 0 :(得分:1)
正如@masseyb在评论中提到的那样,詹金斯将$HOME
视为当前的建筑环境。
有两种解决方法:
您可以使用Envinject Plugin在Jenkins中设置环境变量。
$HOME/.m2
您可以为.m2
指定绝对路径,例如:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /home/samir-shail/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B'
}
}
}
}
注意:请检查Jenkins是否有权访问您的$HOME/.m2/
目录。
答案 1 :(得分:1)
https://jenkins.io/doc/book/pipeline/docker/上的文档在进行批量安装时具有误导性并且浪费时间。
创建Docker容器时,它是使用用户1002和组1002创建的。用户1002无权访问/root/.m2,而只能访问注入到该容器中的工作目录。
Dockerfile
Seq
Settings.xml
FROM maven:3-alpine
COPY --chown=1002:1002 repository/ /usr/share/maven/ref/repository/
RUN chmod -R 775 /usr/share/maven/ref/repository
COPY settings.xml /usr/share/maven/ref/
Docker命令
<localRepository>/usr/share/maven/ref/repository</localRepository>
Jenkinsfile
docker build -t <server>:<port>/<image-name>:<image-tag> .
docker push <server>:<port>/<image-name>:<image-tag>
docker volume create maven-repo