gpt4 book ai didi

Jenkins 管道中的 Docker 代理卷安装未按预期工作

转载 作者:行者123 更新时间:2023-12-02 19:02:50 24 4
gpt4 key购买 nike

以下带有卷挂载的片段会在 $JENKINS_HOME/workspace/<project-name>/? 下创建 Maven 依赖项(问号)而不是在$HOME/.m2/

请注意,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 那样简单。我已经在 J​​enkins 从机上创建了/var/jenkins/.m2 目录,构建将在其中运行。确保新目录具有 775 权限(尽管可能不是必需的),并将所有者更改为与“/var/opt/slave/workspace/pipeline_test”相同的所有者(根据下面的日志获取此路径)

$ 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 镜像的这一声明让我感觉卷挂载已更新

To create a pre-packaged repository, create a pom.xml with the dependencies you need and use this in your Dockerfile. /usr/share/maven/ref/settings-docker.xml is a settings file that changes the local repository to /usr/share/maven/ref/repository, but you can use your own settings file as long as it uses /usr/share/maven/ref/repository as local repo.

最佳答案

文档位于:https://jenkins.io/doc/book/pipeline/docker/在卷安装方面会产生误导并且浪费时间。

当 Docker 容器创建时,它会使用用户 1002 和组 1002 创建。用户 1002 无权访问/root/.m2,只能访问注入(inject)到容器中的工作目录。

Dockerfile

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/

Settings.xml

<localRepository>/usr/share/maven/ref/repository</localRepository>

Docker命令

docker build -t <server>:<port>/<image-name>:<image-tag> .
docker push <server>:<port>/<image-name>:<image-tag>
docker volume create maven-repo

Jenkins文件

pipeline {
agent('linux2') {
docker {
label '<slave-label-here>'
image '<image-name>:<image-tag>'
registryUrl 'https://<server>:<port>'
registryCredentialsId '<jenkins-credentials-for-docker-login>'
args '-v maven-repo:/usr/share/maven/ref/repository/'
}
}

parameters {
booleanParam(name: 'SONAR', defaultValue: false, description: 'Select this option to run SONAR Analysis')
}

stages {
stage('Build') {
steps {
sh 'mvn clean install -s /usr/share/maven/ref/settings.xml -f pom.xml'
}
}
}
}

关于Jenkins 管道中的 Docker 代理卷安装未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com