You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:18:15