0

我需要在 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 ====='                        
            '''
    }
4

1 回答 1

2

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

它会是这样的:

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 作为构建变量提供。

请注意:此解决方案要求 Docker 守护进程与 Jenkins 在同一主机上运行!否则,您的容器将无法使用该工作区。

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

在 Docker 容器中运行 Jenkins 测试从代码库中的 dockerfile 构建

于 2019-05-10T19:43:22.947 回答