Jenkins CI/CD中如何调用子文件夹内的Dockerfile构建镜像
子目录存放Dockerfile时的Jenkins镜像构建方法
先明确docker build命令两个路径参数的作用,别搞混逻辑:
-f参数:仅用来指定Dockerfile文件本身的实际存储位置- 命令末尾的路径:是Docker构建的上下文根目录,构建过程中所有COPY/ADD操作只能引用这个目录范围内的文件
可直接复用的构建命令
你之前根目录构建的命令里-f后多打了一个多余空格,修正后根据实际需求选对应命令即可。
场景1:Dockerfile内需要引用子目录外的文件(保留仓库根目录为构建上下文)
针对你给出的示例路径thismyapp/dashboard/dockerfile,直接替换-f对应的文件路径就行:
sh 'docker build -t image_name:image_tag -f ./thismyapp/dashboard/dockerfile .'
如果执行shell命令前,Jenkins已经把当前工作目录切到了thismyapp文件夹下,把-f后的路径简化为./dashboard/dockerfile即可。
场景2:所有构建依赖都在dashboard子目录内(推荐,构建速度更快)
如果项目代码、配置文件等构建需要的资源全部存放在thismyapp/dashboard/目录下,不需要引用外层文件,直接把构建上下文切到该子目录即可,不用写长路径指定Dockerfile:
sh 'docker build -t image_name:image_tag -f ./dockerfile ./thismyapp/dashboard'
这种方式Docker不会打包上下文外的无关文件传给构建进程,能明显提升构建速度,也能避免无关文件被意外打入镜像。
踩坑提醒
- Linux环境下文件名大小写敏感,
dockerfile和Dockerfile是完全不同的两个文件,写路径时要和仓库内实际文件名完全一致,否则会报找不到Dockerfile的错误 - 不要随意把构建上下文路径设为系统根目录
/,会导致整个磁盘的文件都被打包进构建上下文,大概率直接把构建节点跑挂 - 如果用Jenkins Docker插件而非手写shell命令构建,只需要在插件配置项里分别填写Dockerfile路径、构建上下文路径即可,底层逻辑和命令行完全一致
内容的提问来源于stack exchange,提问作者Bootable
相关产品推荐
相关产品推荐

