我是构建和运行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文件。它说找不到文件。
我读了几篇文章,并尝试了几种方法
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文件。
答案 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
"""