如何将文件从Docker容器复制到Jenkins

时间:2020-03-10 16:46:56

标签: python docker jenkins dockerfile

我是构建和运行docker的新手。因此,我有一个jenkins管道设置,其中有一个运行python文件的阶段。我创建了一个泊坞窗来运行此python文件。使用命令

    sh "docker build -f create-abc-Dockerfile -t create-abc ."
    sh "docker run create-abc python create-abc.py $name $abc ${abcDescription}"
    getDetails = sh(returnStdout: true, script: "cat abc_details").trim()

其中create-abc-Dockerfile是我的docker文件,create-abc.py是我的python文件。 create-abc-Dockerfile包含

     FROM python:3.8-alpine3.10
     COPY create-abc.py .
     RUN pip install requests
     CMD ["python", "create-abc.py"]

我的python文件执行一些操作-在文件“ xyz_details”中调用API和响应的某些部分

Jenkins管道中的以上代码可以正确运行我的执行API的python文件,但无法访问xyz_details文件。它说找不到文件。

我读了几篇文章,并尝试了几种方法

  1. 我没有运行构建,而是在docker中将CMD更改为RUN-但我的python文件已参数化,并且传递了动态值。所以这种方法对我不起作用
  2. 尝试过这种方法
    docker cp <containerId>:/file/path/within/container /host/path/target

我的代码:

    sh "docker cp create-abc:/xyz_details ."

其中create-rfc是我的容器(构建docker时,我使用上面提供的标签名称) 但是我收到以下错误

    + docker cp create-abc:/xyz_details .
     Error: No such container:path: create-abc:/xyz_details

我要做的是,运行python文件,将结果写入xyz_details,然后在Jenkins管道中再次读取此xyz_details文件。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用卷。基本上,您需要运行docker容器并为目标路径(将在其中生成文件)附加一个卷。然后您将可以从主机访问文件。

sh "docker run -v $PWD/myfiles:/dir/path/within/container create-abc python create-abc.py $name $abc ${abcDescription}"
sh "cp -r $PWD/myfiles /to/path"

答案 1 :(得分:0)

这是我通过管道将文件从docker容器复制到jenkins中的本地文件的方式

  sh """
          docker cp  container_name:/app/test-reports ./test-reports
     """