在Jenkins中构建和运行Docker容器

时间:2019-05-10 19:07:55

标签: docker jenkins

我需要在Jenkins中运行docker容器,以便可以在以下步骤中运行诸如pycodestyle之类的已安装库。

  1. 我成功构建了Docker容器(在Dockerfile中)
  2. 如何访问该容器,以便可以在下一步中使用它? (请在下面的“构建”步骤中查找>> <<代码)

谢谢

    stage('Build') {
            // Install python libraries from requirements.txt (Check Dockerfile for more detail)


            sh "docker login -u '${DOCKER_USR}' -p '${DOCKER_PSW}' ${DOCKER_REGISTRY}"
            sh "docker build \
                --tag '${DOCKER_REGISTRY}/${DOCKER_TAG}:latest' \
                --build-arg HTTPS_PROXY=${PIP_PROXY} ."
        >>    sh "docker run -ti ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest sh" <<<
            }
    }

    stage('Linting') {
            sh '''
            awd=$(pwd)
            echo '===== Linting START ====='  
            for file in $(find . -name '*.py'); do
                    filename=$(basename $file)
                    if [[ ${file:(-3)} == ".py" ]] && [[ $filename = *"test"* ]] ; then
                            echo "perform PEP8 lint (python pylint blah) for $filename"
                            cd $awd && cd $(dirname "${file}") && pycodestyle "${filename}" 
                    fi
            done
            echo '===== Linting END ====='                        
            '''
    }

1 个答案:

答案 0 :(得分:2)

您需要将Jenkins作业的工作空间(包含python项目)作为卷安装(请参阅“ docker run -v”选项)到您的容器,然后在该容器中运行“下一步”构建步骤。您可以通过提供外壳脚本作为项目源代码的一部分来执行此操作,该脚本将执行“下一步”或在上一个构建阶段编写该脚本。

会是这样的:

sh "chmod +x build.sh"
sh "docker run -v $WORKSPACE:/workspace ${DOCKER_REGISTRY}/${DOCKER_TAG}:latest /workspace/build.sh"

build.sh是一个可执行脚本,它是项目工作区的一部分,并执行“下一步”。

$ WORKSPACE是您的jenkins作业使用的文件夹(通常为/ var / jenkins_home / jobs // workspace-由Jenkins作为build variable提供。

请注意:此解决方案要求Docker守护程序与Jenkins在同一主机上运行!否则,工作空间将对您的容器不可用。

另一种解决方案是将Jenkins作为Docker容器运行,因此您可以与在构建作业中运行的容器轻松共享Jenkins的home / workspace,如此处所述:

Running Jenkins tests in Docker containers build from dockerfile in codebase