Jenkins Docker容器中的Docker挂载卷

时间:2020-07-16 08:38:47

标签: docker jenkins

我正在对詹金斯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

我的问题是:

  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,我认为它安装在/src容器中指向pyinstaller-linux的正确路径上。

  2. 我不太清楚为什么在测试阶段运行pytest docker时不需要挂载任何卷? 为什么不交付阶段与测试阶段相同? (如#### 2)

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

0 个答案:

没有答案