ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

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

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 容器启动成功
返回列表