部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目

背景

如果SpringBoot的jar包项目采用传统的方式去打包部署到服务器上,会非常的繁琐和麻烦。每次项目修改后重新部署,都需要先将项目进行打包,然后将jar包发送到服务器,指定位置,然后在运行java -jar的命令,如果每次都进行人工打包部署,效率会非常的低。所以我们可以采用jenkins+docker的方式实现自动化部署。

jenkins的安装和使用:暂略
docker的安装和使用:centos7安装docker及docker常用命令

jenkins+docker部署SpringBoot的jar包项目

采用部署环境

  • docker采用centos7安装的
  • jenkins采用win10本地安装的

服务器当时使用docker安装的jenkins,安装git可以成功,但是安装maven总是失败,导致在git拉取的项目无法进行打包,各种方法总是失败。docker安装的容器互相独立,也不能使用宿主机安装的Maven(也可以解决,但是比较复杂)。所以这里采用win10安装的jenkins,多余的操作只是在需要将jar包发送至远程的服务器。

配置jenkins插件和全局工具配置

配置所需插件

点击系统管理,选择插件管理,添加除了新手推荐需要安装的插件
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第1张图片
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第2张图片
安装Publish Over SSH用于连接远程服务器
在这里插入图片描述
安装Deploy to container插件用于把打包的应用发布到远程服务器
在这里插入图片描述

进行全局工具配置

如果win10或者服务器安装的有,可以直接选择使用(不选择自动安装),如果没有也可以选择自动安装。

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第3张图片
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第4张图片

进行系统设置

去系统设置里配置Publish over SSH
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第5张图片

  • Passphrase 服务器的密码
  • Path to key 连接远程服务器密钥文件的路径
  • Key 密钥文件的内容
  • Name 自定义服务器名
  • HostName 服务器IP外网地址
  • UserName 服务器用户名
  • Remote Directory 传输文件的目录

Publish over SSH可以配置多个,根据Name进行判别。会将所需要传的文件源串发送至Remote Directory目录。

构建项目

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第6张图片
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第7张图片

配置git地址

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第8张图片
如果有需要可以构建触发器,用于自动化构建项目
部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第9张图片
触发器建议使用这2种

1.定时构建
定时构建就是没隔一段时间就是构建1次任务
0 * * * * 代表每小时0分的时候构建1次项目
第1个代表分,第2个代表时,第3个代表日,第4个代表月,第5个代表周

2.轮询SCM
轮询SCM就是查看源码管理的代码有没有更新,如果更新了就去构建,没有更新就不会构建
*/5 * * * * 代表每5分钟就去查看源码有没有更新

当然其他方式的触发器也可以使用。

配置Maven的构建命令

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第10张图片

将拉取并打包到jenkins的workspace的jar包发送至远程服务器

如果使用服务器上的jenkins的将jar包部署在本服务器上,这个步骤可以省略(只执行shell脚本即可)

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第11张图片

  • Source files 项目构建后的目录(以本项目为根路径)
  • Remove prefix 去前缀
  • Remote directoty 发布的目录(前缀为系统设置里配置Publish over SSH的Remote Directory)
  • Exec command 发布完执行的命令
Exec command 的shell脚本:
BUILD_ID=dontKillMe /usr/local/dockerApp/blog-parent/docker.sh
解释:

/usr/local/dockerApp/blog-parent/是服务器放置jar包的目录
docker.sh是执行docker的相关操作

服务器进行docker相关配置

  1. 进入云服务器中到项目的目录下,即/usr/local/dockerApp/blog-parent/
  2. 在该目录下创建并编写Dockerfile文件
###指定java8环境镜像
FROM jdk1.8
###复制文件到容器app-springboot
ADD blog-system.jar blog-system.jar
###声明启动端口号
EXPOSE 8090
###配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","blog-system.jar"]

jdk1.8为docker安装的jdk8环境,如果服务器docker为安装jdk8,会进行自动安装。

  1. 创建并配置docker.sh脚本
 # 源jar路径  即jenkins构建后存放的路径
  SOURCE_PATH=/data/jenkins/workspace
#docker 镜像/容器名字或者jar名字 这里都命名为这个
  SERVER_NAME=blog-parent
 #容器id
 CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
 #镜像id
 IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

 echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/ms_backend.jar 迁移至 $BASE_PATH ...."
 #把项目从jenkins构建后的目录移动到我们的项目目录下同时重命名下
  mv $SOURCE_PATH/blog-system-1.0.0-SNAPSHOT.jar $BASE_PATH/blog-system.jar
 #修改文件的权限
  chmod 777 /usr/local/dockerApp/blog-parent/blog-system.jar
  echo "迁移完成"

 # 构建docker镜像
         if [ -n "$IID" ]; then
                 echo "存在$SERVER_NAME镜像,IID=$IID"
                  docker stop $SERVER_NAME   # 停止运行中的容器
                  docker rm $SERVER_NAME     ##删除原来的容器
                  docker rmi $IID   ## 删除原来的镜像

         else
                 echo "不存在$SERVER_NAME镜像,开始构建镜像"
                      
        fi
        

  # 构建镜像 
  cd $BASE_PATH
  docker build -t $SERVER_NAME .
    
# 运行容器
 # --name docker-test                 容器的名字为docker-test
 #   -d                                 容器后台运行
 #   -p 8090:8090 指定容器映射的端口和主机对应的端口都为8090
 #   -v /usr/local/dockerApp/blog-parent:/usr/local/dockerApp/blog-parent   将主机的/usr/local/dockerApp/blog-parent目录挂载到容器的/usr/local/dockerApp/blog-parent 目录中
 docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8090:8090 $SERVER_NAME
 echo "$SERVER_NAME容器创建完成"

此shell脚本亲测有效,其中关键点为:如果存在镜像,停止运行中的容器-删除原来的容器-删除原来的镜像-构建新的镜像-运行新的容器;如果不存在镜像,构建新的镜像-运行新的容器

有的博客说,有-v挂载之后,每次本地更新jar包重启容器即可,不用重新构建镜像,不知道是否可行,需要测试。测试后在进行更新,

立即构建项目

部署SpringBoot的jar包项目让人头疼,不如使用jenkins+docker自动化部署jar包项目_第12张图片
如果是success说明成功

通过ip+端口,访问项目接口,测试是否成功

你可能感兴趣的:(springboot,linux服务器部署运维,jenkins+docker,自动化部署jar包项目,服务器自动化部署,java,SpringBoot部署项目)