docker安装jenkins, pipeline再调用宿主机的docker, 实现远程主机部署网站,以下以 springboot 为例

发布时间:2026/9/29 3:07:52
docker安装jenkins, pipeline再调用宿主机的docker, 实现远程主机部署网站,以下以 springboot 为例 准备3台主机每台主机都要安装好docker ,docker-compose主机一 192.168.31.199主机二 192.168.31.200主机三 192.168.31.201需要实现主要功能主机一安装jenkins拉取git仓库代码生成docker镜像在主机二中运行部署站点主机三用来安装harbor仓库保存docker镜像主机一安装jenkinsdocker run -u root -d -p 8080:8080 -p 50000:50000 -v ./jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker --restartalways --namejenkins jenkins/jenkins:lts主机三安装harbor下载Harbor的压缩包本课程版本为v1.9.2https://github.com/goharbor/harbor/releases上传压缩包到linux并解压tar -xzf harbor-offline-installer-v1.9.2.tgz mkdir /opt/harbor mv harbor/* /opt/harbor cd /opt/harbor修改Harbor的配置vi harbor.yml修改hostname和porthostname: 192.168.66.102 port: 85安装Harbor./prepare ./install.sh启动Harbordocker-compose up -d 启动 docker-compose stop 停止 docker-compose restart 重新启动访问Harborhttp://192.168.31.201:85默认账户密码admin/Harbor12345pepiline 语法Jenkinsfile// 项目名称 String project_name demo-test // harbor仓库地址 String harbor_url 192.168.31.201:85 // harbor项目名称 String harbor_project_name test // docker标签、版本号 String tag latest // 开放端口 String port 10086 pipeline { agent any tools { maven maven-3.8.9 // 确保这里的名称与 Jenkins 系统配置中的 Maven 名称一致 } stages { stage(pull) { steps { // 下载git代码 git branch: main, credentialsId: gogs, url: http://192.168.31.199:10880/gogs/demo-test.git } } stage(build) { steps { // 执行maven打包完成后并完成 docker打包生成镜像 sh mvn clean package dockerfile:build } } stage(docker tag) { steps { // 生成的镜像打标签 sh docker tag ${project_name}:${tag} 192.168.31.201:85/test/${project_name}:${tag} } } stage(docker push) { steps { // 镜像上传到 harbor 仓库 withCredentials([usernamePassword(credentialsId: harbor, passwordVariable: password, usernameVariable: username)]) { // 登陆harbor仓库 sh docker login -u harbor -p 300800aA 192.168.31.201:85 // 镜像上传 sh docker push 192.168.31.201:85/test/${project_name}:${tag} // sh echo 上传成功 } } } stage(server 200 publish) { steps { // 方法一需要安装 Publish Over SSH 插件 //sshPublisher(publishers: [sshPublisherDesc(configName: test-server, transfers: [sshTransfer(cleanRemote: false, excludes: , execCommand: /opt/jenkins_shell/deploy.sh $harbor_url $harbor_project_name $project_name $tag $port, execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: , remoteDirectorySDF: false, removePrefix: , sourceFiles: )], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) // 方法二 需要安装 SSH Agent 插件 sshagent(credentials: [server-ip-200]) { sh ssh root192.168.31.200 \ /opt/jenkins_shell/deploy.sh $harbor_url $harbor_project_name $project_name $tag $port \ } } } } }DockerfileFROM openjdk:17 ARG JAR_FILE COPY ${JAR_FILE} app.jar EXPOSE 10086 ENTRYPOINT [java,-jar,/app.jar]deploy.sh#! /bin/sh #接收外部参数 harbor_url$1 harbor_project_name$2 project_name$3 tag$4 port$5 imageName$harbor_url/$harbor_project_name/$project_name:$tag echo 容器名称$imageName echo harbor_url: $harbor_url echo harbor_project_name: $harbor_project_name echo project_name: $project_name echo tag: $tag echo port: $port #查询容器是否存在存在则删除 containerIddocker ps -a | grep -w ${project_name}:${tag} | awk {print $1} if [ $containerId ! ] ; then #停掉容器 docker stop $containerId #删除容器 docker rm $containerId echo 成功删除容器 fi #查询镜像是否存在存在则删除 imageIddocker images | grep -w $project_name | awk {print $3} if [ $imageId ! ] ; then #删除镜像 docker rmi -f $imageId echo 成功删除镜像 fi # 登录Harbor docker login -u harbor -p 123456 $harbor_url # 下载镜像 docker pull $imageName # 启动容器 docker run -di -p $port:8080 $imageName echo 容器启动成功

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询