Jenkins Pipeline中如何用docker-compose构建推送镜像至DockerHub
基于docker-compose的Jenkins镜像构建与推送实现方案
原生简洁命令写法(无需额外插件)
完全可以实现和你现有Docker插件写法同等简洁度的逻辑,不需要安装额外Jenkins插件,直接调用节点上的docker compose原生命令即可。
首先你需要在docker-compose.yaml中给对应服务配置好image字段,值为你要推送到DockerHub的镜像名+标签,示例配置片段:
services: your-app: build: . # 对应服务的Dockerfile存放路径 image: my-image:${BUILD_ID} # 配置要推送的目标镜像名和动态标签
对应Jenkins Pipeline的写法和你之前的代码结构几乎一致:
stage('Building image and Push') { steps{ script { // 读取compose配置构建镜像,自动读取Jenkins的BUILD_ID环境变量替换镜像标签 sh "docker compose build" // 推送compose中定义的对应镜像到DockerHub sh "docker compose push" } } }
如果你的compose文件里定义了多个服务,只想构建推送某一个,直接在命令后面加服务名即可,比如docker compose build your-app、docker compose push your-app。
注意:推送前需要完成DockerHub的登录鉴权,和你之前使用docker插件的前置配置完全一致,可以直接复用之前的凭证配置逻辑,比如用
withDockerRegistry步骤包裹上述命令即可。
Docker Compose Build Step插件的使用说明
这个插件可以实现同等操作,但并不推荐优先使用,具体说明如下:
- 该插件本质是对docker compose命令的UI封装,依然要求Jenkins运行节点提前安装好docker compose环境,不会自动部署相关依赖
- 插件更新频率很低,对新版本docker compose的语法兼容性不如原生命令,报错排查链路更长
- 如果要在Pipeline中使用该插件,对应写法如下:
stage('Building image and Push') { steps{ // 构建镜像,传入compose文件路径和构建参数 dockerComposeBuild( composeFiles: ['docker-compose.yaml'], buildArgs: [BUILD_ID: "${env.BUILD_ID}"] ) // 推送镜像 dockerComposePush( composeFiles: ['docker-compose.yaml'] ) } }
如果是自由风格类型的Jenkins任务,直接在构建步骤里选择Docker Compose Build、Docker Compose Push选项,按页面提示填好compose文件路径、镜像标签参数即可。
方案对比
- 优先选择原生shell调用docker compose的写法:无额外Jenkins插件依赖,对所有compose版本兼容性强,报错直接输出原生命令日志,排查成本低,代码简洁度和你之前使用的Docker插件写法基本一致
- 仅当你维护老版本自由风格Jenkins任务、不想手写shell命令时,再考虑使用Docker Compose Build Step插件,该插件近年更新很少,遇到新语法兼容问题的概率更高。
内容的提问来源于stack exchange,提问作者Kavishka
相关产品推荐
相关产品推荐

