在Jenkins中构建并运行Docker容器

在Jenkins中构建并运行Docker容器,docker,jenkins,Docker,Jenkins,我需要在Jenkins中运行docker容器,以便安装的库(如pycodestyle)可以在以下步骤中运行 我成功构建了Docker容器(在Dockerfile中) 如何访问容器以便在下一步中使用它?(请在下面的构建步骤中查找>sh“docker run-ti${docker_REGISTRY}/${docker_TAG}:最新sh”您需要将Jenkins作业(包含python项目)的工作区作为卷(请参阅“docker run-v”选项)装载到容器中,然后运行“下一步”此容器内的生成步骤。您可以

我需要在Jenkins中运行docker容器,以便安装的库(如
pycodestyle
)可以在以下步骤中运行

  • 我成功构建了Docker容器(在Dockerfile中)
  • 如何访问容器以便在下一步中使用它?(请在下面的构建步骤中查找
    >>sh“docker run-ti${docker_REGISTRY}/${docker_TAG}:最新sh”您需要将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"
    
    sh是一个可执行脚本,它是项目工作区的一部分,执行“下一步”

    $WORKSPACE是jenkins作业(通常为/var/jenkins_home/jobs//WORKSPACE)使用的文件夹-它由jenkins作为一个文件夹提供

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

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


    您需要将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"
    
    sh是一个可执行脚本,它是项目工作区的一部分,执行“下一步”

    $WORKSPACE是jenkins作业(通常为/var/jenkins_home/jobs//WORKSPACE)使用的文件夹-它由jenkins作为一个文件夹提供

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

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


    但是如果我把build.sh放在Dockerfile中,它将不能在'Linting'步骤中调用。哦,你的意思是我应该在每个步骤中调用
    docker run
    ,然后调用脚本?是的,你可以用同样的方法进行Linting,这样Linting阶段就可以执行sh“docker run…/Linting.sh”。工作区是jenkins作业使用的文件夹(通常为/var/jenkins_home/jobs//workspace-有一个名为$workspace的生成变量引用此路径。是否可以删除“-it”标志,因为它是由Jenkins执行的,所以不需要使用stdin进行终端会话。但是如果我将build.sh放在Dockerfile中,它将无法在“Linting”步骤中调用。哦,你的意思是我应该在每个步骤中调用
    docker run
    ,然后调用脚本吗?是的,你可以用同样的方式进行Linting,这样Linting阶段就可以正常运行了s a sh“docker run…/linting.sh”。工作区是jenkins作业使用的文件夹(通常为/var/jenkins_home/jobs//workspace-有一个名为$workspace的生成变量引用此路径。您能否删除“-it”标志,因为它是由jenkins执行的,因此不需要与stdin进行终端会话让我们来看看。