Docker在Jenkins Docker容器中挂载卷。
Docker在Jenkins Docker容器中挂载卷。
我正在按照Jenkins的教程进行一些修改。
我通过以下方式运行Jenkins的Docker容器:
docker run --rm --privileged -u root -p 8080:8080 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$PWD"/vol:/var/jenkins_home \ jenkinsci/blueocean
使用我的Jenkins文件:
stage('测试') { agent { docker { image 'qnib/pytest' } } steps { sh 'ls' ##### 1 sh 'py.test --junit-xml test-reports/results.xml sources/test_calc.py' ##### 2 } } stage('交付') { agent any environment { VOLUME = '$(pwd)/sources:/src' ABS_WS = '/home/myname/vol/workspace' JOB_WS = "\${PWD##*/}" IMAGE = 'cdrx/pyinstaller-linux:python2' } steps { dir(path: env.BUILD_ID) { unstash(name: 'compiled-results') sh "pwd" ##### 3 sh "ls" ##### 4 sh "docker run -v '${ABS_WS}/${JOB_WS}/sources:/src' ${IMAGE} 'ls'" ##### 5 sh "docker run -v ${ABS_WS}/${JOB_WS}/sources:/src ${IMAGE} 'ls'" ##### 6 sh "docker run -v ${VOLUME} ${IMAGE} 'ls'" ##### 7 } } }
####1~6的输出和我的问题:
####1: 这里的ls
包括docker容器(qnib/pytest)可以处理的/sources/*.py
。
####3: 输出:/var/jenkins_home/workspace/simple-python-pyinstaller-app/32
####4: 这里的ls
也包括我们需要的/soucres/*.py
####5: 这里的ls
没有包括/sources/*.py
,由于Docker卷挂载失败。
我已经尝试了来自这里的不同解决方案,但仍然没有解决问题。
docker run -v '/home/myname/vol/workspace/${PWD##*/}/sources:/src' cdrx/pyinstaller-linux:python2 ls bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ls add2vals.spec build dist
但是####6与####5类似,只是没有单引号,ls没有输出(为什么?):
docker run -v /home/myname/vol/workspace/32/sources:/src cdrx/pyinstaller-linux:python2 ls bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ls
####7的输出与####5相同。
docker run
-v /var/jenkins_home/workspace/simple-python-pyinstaller-app/32/sources:/src cdrx/pyinstaller-linux:python2 ls bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell ls add2vals.spec build dist
我的问题是:
- 在交付阶段,我如何将Docker容器卷映射到主机或Jenkins容器?
在####3、4中,Jenkins容器中的路径是
/var/jenkins_home/workspace/simple-python-pyinstaller-app/32
,该路径包括/sources/*.py
;而在#####7中,我们可以看到/var/jenkins_home/workspace/simple-python-pyinstaller-app/32/sources:/src
,我认为它被正确地挂载到pyinstaller-linux
容器中的/src
路径上。 - 我不太清楚为什么在运行pytest docker时,测试阶段不需要挂载任何卷?
为什么交付阶段没有像测试阶段一样进行?(类似于####2)
- ####6和####5之间有什么区别?