如何解决DevOps Containerized jenkins:在构建阶段无法访问 jenkins 管道内的 docker volume /var/lib/docker/volumes
我正在使用 jenkins 容器,我使用 docker-compose 运行这个容器
这是我的 docker-compose 文件:
version: '3.3'
services:
jenkins-service:
build:
context: ./
image: docker/jenkins-local
ports:
- 8080:8080
- 5000:5000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- jenkins_data_prod:/var/jenkins_home
- jenkins_tmp_data_prod:/tmp
volumes:
jenkins_data_prod:
jenkins_tmp_data_prod:
这是我的 dockerfile
FROM jenkins/jenkins:lts
# Installation of docker
USER root
RUN curl -sSL https://get.docker.com/ | sh
# Adding user jenkins in groupe "docker"
RUN usermod -aG docker jenkins
# Installation of docker-compose
RUN curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
#USER jenkins
之后我使用 docker-compose up --build
命令运行 jenkins
我首先注意到我的 docker 正在安装卷 "jenkins_jenkins_data_prod" 和 "jenkins_jenkins_tmp_data_prod" 作为名称,而我只写了 "jenkins_data_prod" strong> 和 "jenkins_tmp_data_prod" 在我的 docker-compose.yml 上,所以我修改了我的文件并将卷名称写为 "data_prod" 和 "tmp_data_prod"
像这样:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- data_prod:/var/jenkins_home
- tmp_data_prod:/tmp
volumes:
data_prod:
tmp_data_prod:
我发现卷安装在“/var/lib/docker/volumes/jenkins_data_prod/_data” 当我使用此命令检查挂载点时,作为“jenkins_data_prod”和“jenkins_tmp_data_prod”:
'docker volume inspect jenkins_data_prod'
结果命令:
terminal :
{
"CreatedAt": "2021-06-15T23:33:41Z","Driver": "local","Labels": {
"com.docker.compose.project": "jenkins","com.docker.compose.version": "1.29.1","com.docker.compose.volume": "data_prod"
},"Mountpoint": "/var/lib/docker/volumes/jenkins_data_prod/_data","Name": "jenkins_data_prod","Options": null,"Scope": "local"
}
所以在那之后我运行一个 Jenkins pipline 在 gitlab 上构建一个个人项目,它使用“/var/jenkins_home”作为工作区
我有一个使用绑定安装卷的 docker-compose.yml 文件
我的 docker-compose 运行
version: '3.3'
services:
netcore:
image: mcr.microsoft.com/dotnet/sdk:3.1
volumes:
- ../../projet-api/:/sources
- ${NUGET_HOME}/.nuget/:/root/.nuget
- ../build/netcore/application:/application
working_dir: /sources
command: dotnet publish -o /application -c Debug --self-contained false /p:Version=${VERSION}
当我在“/var/jenkins_home”工作区上运行图像时,我曾经有错误
+ docker-compose run --rm netcore
Microsoft (R) Build Engine version 16.7.2+b60ddb6f4 for .NET
copyright (C) Microsoft Corporation. All rights reserved.
MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
所以“/var/jenkins_home”是空的,我的docker-compose只创建了名称为“/projet-api”和“/build/netcore/application”的文件夹,我过去常常看到包含项目的工作区在哪里我在“\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\jenkins_data_prod_data\workspace”中找到它
我查看了 arround docs,发现“\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes”被映射到“/var/lib/docker/volumes/”
所以我决定尝试使用环境变量运行图像
version: '3.3'
services:
netcore:
image: mcr.microsoft.com/dotnet/sdk:3.1
volumes:
- ${PWD_docker}/../../projet-api/:/sources
- ${NUGET_HOME}/.nuget/:/root/.nuget
- ${PWD_docker}/../build/netcore/application:/application
working_dir: /sources
command: dotnet publish -o /application -c Debug --self-contained false /p:Version=${VERSION}
我在 jenkinsfile 中运行的部分
node {
//*********************************
// getting code
//*********************************
stage ('SCM'){
checkout scm
}
//*********************************
// docker images
//*********************************
stage('RUNNING NETCORE') {
dir ('project-docker/compile'){
def containerPWD = pwd() // printing /var/jenkins_home/....
def pwdval = "/var/lib/docker/volumes/jenkins_data_prod/_data"
def dockerHostPWD = containerPWD.replace("/var/jenkins_home",pwdval)// /var/lib/docker/volumes/jenkins_data_prod/_data
def props = readProperties file: '.env'
VERSION = props.VERSION
withEnv(["NUGET_HOME=${dockerHostPWD}","VERSION=${VERSION}","PWD_docker=${dockerHostPWD}"]) {
sh """
docker-compose run --rm netcore
"""
}
}
}
.
// rest of the code .
.
仍然是 MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file.
的错误
问题
1/ 使用这些路径运行我的 docker-compose 只创建文件夹,在最后一个我把它放在“\wsl$\Ubuntu\var\lib\docker\volumes”中,所以看起来就像 jenkins 不能访问“\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes”这是包含项目的工作区,使用路径“/var/lib/docker/volumes”任何人都可以帮我找出如何访问卷? 也许 "/var/lib/docker/volumes" 并没有真正映射到 "\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes" ?但是对于“\wsl$\Ubuntu\var\lib\docker\volumes”?
(无需建立符号链接,或将我的主机“/var/jenkins_home”绑定到运行 jenkins 的 docker-compose 中的 jenkins“/var/jenkins_home”。)
2/ 我的第二个问题是为什么我的卷前有“jenkins_”前缀,我们可以在标签“com.docker.compose.volume”上看到:“data_prod”,然后我们看到在名称“名称”处:“jenkins_data_prod” 以及为什么标签卷是“data_prod”而卷名不是
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。