You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Drone CI容器内如何将构建文件复制到宿主机?

解决Drone容器内复制文件到宿主机的问题

你的问题核心在于错误地尝试在Drone的build容器内调用宿主机的Docker命令——默认的Drone构建容器是轻量化的,既没有docker客户端,也没有sudo工具,而且这种方式本身也不符合CI/CD的最佳实践。

我给你推荐最安全、最简单的解决方案:直接通过挂载宿主机目录的方式,让Drone容器可以直接读写宿主机的目标路径,无需额外的Docker命令。

修改后的drone.yml配置

pipeline:
  build:
    image: node:7
    commands:
      - cd client
      - npm config set registry https://registry.npm.taobao.org
      - npm install --no-optional
      - yarn run build
      # 直接将构建产物复制到挂载的宿主机目录
      - cp -r ./build/* /build-output/
    # 挂载宿主机的目标目录到容器内的/build-output
    volumes:
      - /var/www/react/:/build-output/

配置说明

  1. volumes字段:这行配置会把宿主机的/var/www/react/目录,映射到构建容器内的/build-output/路径。容器内对/build-output/的读写操作,都会直接作用到宿主机的对应目录。
  2. 复制命令:把原来的docker cp换成普通的cp命令,直接将client/build下的产物复制到挂载的目录即可。

注意事项

  • 确保宿主机的/var/www/react/目录权限正确:Drone构建容器默认使用非root用户运行,你需要确保该目录对容器用户有写入权限(可以通过chmod 777 /var/www/react/临时测试,或者更安全地设置对应用户组权限)。
  • 如果你的Drone Runner是Docker模式,需要确认Runner本身有访问宿主机目录的权限(通常默认配置即可支持)。

这种方式既避免了在容器内调用宿主机Docker的安全风险,也比原来的方案更简洁可靠。

内容的提问来源于stack exchange,提问作者Tab Gre

火山引擎 最新活动