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

Jenkins Docker Slave中集成Docker CLI执行docker build的方法

Jenkins SSH Agent节点Docker能力集成方案

前置准备

  • 安装Jenkins插件:Docker Pipeline、Credentials Plugin,安装后重启实例生效
  • 在Jenkins凭证管理页新增Docker Hub账号密码凭证,ID命名为docker-hub-cred
  • 无需在远程SSH Agent节点手动安装系统级Docker服务,相关CLI工具由插件自动分发到节点工作目录

Jenkinsfile改造说明

原有流水线阶段全部保留,直接追加Docker构建、推送逻辑即可,镜像标签默认取Git短提交哈希,无需手动维护版本号。

完整改造后Jenkinsfile示例

pipeline {
  agent any

  environment {
    // 按需替换为实际的Docker Hub用户名、镜像名
    DOCKER_USER = "your_docker_username"
    IMAGE_NAME = "your_image_name"
    IMAGE_TAG = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
  }

  stages {
    // 原有阶段全部保留
    stage("Install") {
      steps {
        sh "npm install"
      }
    }
    stage("Build") {
      steps {
        sh "npm run build"
      }
    }
    stage("Format") {
        steps {
            sh "npm run format"
        }
    }
    stage("Lint") {
      steps {
        sh "npm run lint"
      }
    }
    stage("Test") {
      steps {
        sh "npm run test"
      }
    }
    stage("Code Coverage") {
      steps {
        sh "npm run test:cov"
        publishHTML(target: [
            reportDir: "./coverage/lcov-report",
            reportFiles: "index.html",
            reportName: "Jest Coverage Report"
        ])
      }
    }
    stage("End-To-End Testing") {
      steps {
        sh "npm run test:e2e"
      }
    }

    // 新增Docker相关阶段
    stage("Docker Build") {
      steps {
        // 若Dockerfile不在项目根目录,可追加参数:docker.build("${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}", "-f ./custom/path/Dockerfile .")
        docker.build("${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}")
      }
    }
    stage("Docker Push") {
      steps {
        withCredentials([usernamePassword(credentialsId: 'docker-hub-cred', usernameVariable: 'DOCKER_LOGIN_USER', passwordVariable: 'DOCKER_LOGIN_PWD')]) {
          sh "echo ${DOCKER_LOGIN_PWD} | docker login -u ${DOCKER_LOGIN_USER} --password-stdin"
          sh "docker push ${DOCKER_USER}/${IMAGE_NAME}:${IMAGE_TAG}"
        }
      }
    }
  }
}

扩展使用说明

本方案规避了docker.sock绑定挂载的路径权限问题,所有Docker命令的执行上下文与流水线工作目录完全对齐,不会出现构建上下文识别错误的问题。

  • 后续需要调用Docker CLI完成的其他操作(比如启动依赖容器做集成测试、导出镜像产物等),均可直接在流水线steps中调用docker指令,无需额外修改节点环境
  • 若执行时出现Docker CLI拉取失败的情况,可在Jenkins全局工具配置页指定固定的Docker CLI版本,无需调整节点权限或环境

内容的提问来源于stack exchange,提问作者Sushant Keny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 08:54:01