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
相关产品推荐
相关产品推荐

