Drone.io CI流水线步骤间文件共享失败,Docker构建报错求助
解决Drone CI流水线中步骤间文件共享的问题
你遇到的核心问题是Drone CI的各个流水线步骤默认运行在独立的Docker容器中,容器间的文件系统是完全隔离的——test步骤生成的build文件夹只存在于它自己的容器环境里,publish步骤的容器根本访问不到这个目录,所以Docker构建时才会报找不到文件的错误。
下面是具体的解决方案:
1. 配置共享工作区(Workspace)
Drone提供了workspace配置项,让你可以指定一个所有步骤共用的目录,这样步骤间生成的文件就能被互相访问到。修改你的.drone.yml,添加共享工作区配置:
workspace: path: /app pipeline: test: image: node:10 commands: - npm install --production - npm run build --production # 该步骤会在共享的/app目录下执行,build文件夹将生成在/app/build路径 publish: image: plugins/docker repo: myhub/image_name context: /app # 指定Docker构建的上下文为共享工作区 when: event: push branch: master
2. 确认Dockerfile的位置与COPY路径
请确保你的Dockerfile放在项目根目录下(也就是共享工作区/app内),这样plugins/docker插件构建时,会以/app为上下文目录,此时Dockerfile里的COPY build build就能找到/app/build目录了。
如果你的Dockerfile不在根目录,需要在publish步骤中用dockerfile参数指定具体路径:
publish: image: plugins/docker repo: myhub/image_name context: /app dockerfile: /app/your/path/Dockerfile when: event: push branch: master
验证逻辑
修改后,test步骤会在共享的/app目录下执行构建,生成的build文件夹会保留在共享工作区中;publish步骤的docker插件以/app为构建上下文,此时Docker构建就能正常访问到build文件夹,COPY命令也就不会报错了。
内容的提问来源于stack exchange,提问作者SrvfUser




