docker - 在Jenkins中构建和运行Docker容器

标签 docker jenkins

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

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

  • 谢谢
        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 ====='                        
                '''
        }
    

    最佳答案

    您需要将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作为build variable提供。

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

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

    Running Jenkins tests in Docker containers build from dockerfile in codebase

    关于docker - 在Jenkins中构建和运行Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56083531/

    相关文章:

    bash - 使用 bash 脚本中的 shell 字符串和参数运行 docker exec 命令

    java - Micronaut 和 Java Mail API

    linux - 如何更改docker服务的用户?

    Jenkins 共享库上下文

    jenkins - 当 Jenkins 服务器位于 kubernetes 集群之外时,我可以使用 Jenkins kubernetes 插件吗?

    docker - Heroku Docker 部署构建参数

    docker compose 变量替换

    java - Maven - 分离部署和项目

    ios - 测试 iOS 移动配置文件的命令行方式是否仍然有效?

    git - 在 Jenkins 中,有没有简单的方法可以从指定的 GIT SHA ID 进行构建?