我正在对詹金斯tutorial进行一些修改。
我通过以下方式运行Jenkins码头集装箱:
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('Test') {
agent {
docker {
image 'qnib/pytest'
}
}
steps {
sh 'ls' ##### 1
sh 'py.test --junit-xml test-reports/results.xml sources/test_calc.py' ##### 2
}
}
stage('Deliver') {
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卷安装失败。
我已经尝试过使用here以外的其他解决方案,但仍然无法正常工作。
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
,我认为它安装在/src
容器中指向pyinstaller-linux
的正确路径上。
我不太清楚为什么在测试阶段运行pytest docker时不需要挂载任何卷? 为什么不交付阶段与测试阶段相同? (如#### 2)
#### 6和#### 5有什么区别?