Docker在Jenkins Docker容器中挂载卷。

11 浏览
0 Comments

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

我的问题是:

  1. 在交付阶段,我如何将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路径上。

  2. 我不太清楚为什么在运行pytest docker时,测试阶段不需要挂载任何卷?

    为什么交付阶段没有像测试阶段一样进行?(类似于####2)

  3. ####6和####5之间有什么区别?

0