【问题标题】:How to run a python script in a docker container in jenkins pipeline如何在詹金斯管道的docker容器中运行python脚本
【发布时间】:2019-02-20 23:17:51
【问题描述】:

我在 dockerhub 中有一个 docker 映像,我想将它作为代理添加到我的 jenkins 管道脚本中。作为图像的一部分,我执行 git clone 以从 github 获取一个存储库,该存储库具有多个 python 脚本,这些脚本对应于我的 jenkins 管道中的多个阶段。我尝试到处搜索,但找不到有关如何访问 jenkins 管道中 docker 容器内文件的相关信息。

我在虚拟机上运行 jenkins,它安装了 docker。管道在 docker 容器上执行构建。由于管道的每个阶段都涉及许多步骤,因此我尝试尽可能多地使用 python API。

这就是我的 dockerfile 的样子,并且图像构建成功,我可以将它托管在 dockerhub 中。当我运行容器时,我可以看到“jenkins_pipeline_scripts”目录,其中包含管道阶段所需的所有 Python 脚本。

FROM ros:melodic-ros-core-stretch

RUN apt-get update && apt-get -y install python-pip

RUN git clone <private-repo with token>

这就是我当前的 jenkins 管道脚本的样子。

pipeline {
    agent {
        docker {
            image '<image name>'
            registryUrl 'https://registry.hub.docker.com'
            registryCredentialsId 'docker-credentials'
            args '--network host -u root:root'
        }
    }

    stages {
        stage('Test') {
            steps {
                sh 'python jenkins_pipeline_scripts/scripts/test.py'   
            }
        }
    }
}

这是我在执行作业时遇到的错误。

$ docker top 05587cd75db5c4282b86b2f1ded2c43a0f4eae161d6c7d7c03d065b0d45e1 -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ python jenkins_pipeline_scripts/scripts/test.py
python: can't open file 'jenkins_pipeline_scripts/scripts/test.py': [Errno 2] No such file or directory

【问题讨论】:

  • 请给Jenkins的所有控制台输出

标签: python docker jenkins jenkins-pipeline


【解决方案1】:

当 Jenkins Pipeline 启动代理容器时,它将通过 -w 选项更改容器的 WORKDIR 并通过 -v 选项挂载 Jenkins 作业的工作区文件夹。

由于这两个选项,Jenkins 作业的工作区文件夹将成为您容器的WORKDIR

以下是我的詹金斯作业控制台输出:

docker run -t -d -u 29001:100 
-w /bld/workspace/test/agent-poc 
-v /bld/workspace/test/agent-poc:/bld/workspace/test/agent-poc:rw,z 
-v /bld/workspace/test/agent-poc@tmp:/bld/workspace/test/agent-poc@tmp:rw,z 
-e ******** -e ******** -e ******** -e ******** 
docker.hub.com/busybox cat

您在构建镜像时克隆了代码,并且它们不在WORKDIR内,因此不会报告此类文件错误。

解决问题的两种方法。

1) 首先cd你的代码文件夹,你应该知道那个路径。

    stage('Test') {
        steps {
            sh '''
              cd <your code folder in container>
              python jenkins_pipeline_scripts/scripts/test.py
            '''   
        }
    } 

2) 将 git clone 代码仓库从 Dockerfile 移到流水线阶段

正如我在开始时解释的那样,您的工作工作区将成为容器的WORKDIR, 因此,您可以通过管道步骤将代码克隆到 jenkins 作业工作区,然后您无需 cd &lt;your code folder in container&gt;

【讨论】:

  • 谢谢。我会试试这个!
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 2018-12-18
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多