实现一键发布SpringBoot项目,解放你的双手

5 篇文章 0 订阅
5 篇文章 0 订阅

实现一键发布SpringBoot项目,解放你的双手

每次发版都需要大量重复的操作,虽然不难,但是很累,既然我们是写程序的,那么有没有方法能一键发布,傻瓜式部署呢,今天就带大家一起学习下。

一、发布一个SprongBoot项目的流程

  1. 利用maven将项目打成jar包

    pic
  2. 将jar包上传到服务器指定目录

    mkdir -p /usr/data/java/demo
    mv demo-0.0.1-SNAPSHOT.jar demo.jar
    

    在服务器端创建存放jar文件目录,然后将jar包重命名下方便操作。(其实可以在maven打包时候设置打包名称,在boot项目的pom.xml配置即可)

    pic
  3. 启动Java即可

    nohup java -jar demo.jar >/dev/null 2>&1&
    

    我们思考下这样是否完善?第一次这么操作肯定没问题,第二次发布,我们进行到第三步的时候项目肯定启动不起来,因为端口号占用,所以我们还需要在第三步之前加入一个杀掉之前进程的一个操作

  4. 杀掉之前进程(第三步之前

    首先,我们查看之前的boot进程是否存在,存在 kill -9 进程id,不存在跳过

    ps aux | grep demo.jar
    kill -9 1051
    
    pic

二、利用Jenkins实现一键发布

利用Jenkins能极大地简化我们发布流程,我们在编写完代码后,提交git,然后在Jenkins的操作页面点击构建即可。但是这种方式有两个前提,一个是服务器搭建Jenkins服务,一个是代码必须托管(git或者svn)

1. Jenkins发布前提条件

搭建Jenkins服务,具体搭建过程以及第四点的maven插件参考我的博客: 从零开始搭建Jenkins(文末有常用插件下载链接),有帮助到大家希望给个赞。

  • Jenkins配置Maven

    pic
  • Jenkins所在的服务器必须有Java服务

  • Jenkins安装Maven插件

2. Jenkins发布配置
  1. 创建maven任务

    pic pic
  2. git配置(代码来源)

    关联git,这里我选择将代码托管到gitee上,然后添加你gitee账号和密码,下面指定git分支

    alt=“pic” style=“margin: auto;”/>

  3. maven打包命令

    clean install -Dmaven.test.skip -U
    
    pic
  4. 构建后的shell命令

    pic
    #!/bin/bash 
    
    #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
    export BUILD_ID=dontKillMe
    
    
    #Jenkins中编译好的jar名称
    jar_name=demo.jar
    
    #指定最后编译好的jar存放的位置
    www_path=/usr/data/java/demo/
    
    #存放pid文件位置
    pid_path=/usr/data/java/demo/demo.pid
    
    #Jenkins中编译好的jar位置
    jar_path=/root/.jenkins/workspace/${JOB_BASE_NAME}/target/
    
    #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
    pid=$(cat ${pid_path})
    
    #进入指定的编译好的jar的位置
    cd  ${jar_path}
    
    #将编译好的jar复制到最后指定的位置
    cp  ${jar_path}/${jar_name} ${www_path}
    
    #进入最后指定存放jar的位置
    cd  ${www_path}
    
    #杀掉以前可能启动的项目进程
    kill -9 ${pid}
    
    #启动jar,,后台启动
    java -jar  ./${jar_name} >/dev/null 2>&1&
    
    #将进程ID存入到demo.pid文件中
    echo $! > ${pid_path}
    

    shell脚本需要修改三个地方

    #Jenkins中编译好的jar名称
    jar_name=demo.jar
    
    #指定最后编译好的jar存放的位置
    www_path=/usr/data/java/demo/
    
    #存放pid文件位置
    pid_path=/usr/data/java/demo/demo.pid
    
  5. 点击保存,然后在jar包存在目录的平级创建一个 后缀为pid文件记录当前启动boot项目的进程

    touch demo.pid
    
  6. 点击构建即可

    首次构建时候第4步shell脚本中 kill -9 ${pid} 这一步骤 注释掉 在 kill 前面 添加 # 号,kill一个空的pid会报错,导致后面无法执行,有知道解决方案小伙伴可以评论区评论。第一次构建完后,会将项目的进程号写入该文件,然后将shell脚本的 kill -9 ${pid} 的注释去掉。第一次构建需要下载依赖文件比较慢,maven的setting.xml可以配置阿里镜像。

    pic
3. Jenkins部署测试

我们最终实现的效果是,写完代码–>Git提交–>Jenkins点击构建

  1. 首先我们将修改的SpringBoot项目打包名称修改下。

    pic
  2. 我们在SpringBoot里面新增个接口用来测试

    /**
     * @Author weiweisong
     * @Classname HelloController
     * @Description 控制层
     * @Date 2021/2/24 9:57
     */
    @RestController
    public class HelloController {
    
        @GetMapping("/hello")
        public String hello() {
            return "张三";
        }
    }
    
  3. git 提交 推送

  4. 点击构建(第一次kill 注释掉),浏览器查看效果

    pic
  5. 然后修改代码,再次提交推送,然后构建(记得把kill 注释解开),最后查看效果

    pic

三、使用Alibaba Cloud Toolkit插件一键发布

这个是我目前在使用的方式,Jenkins虽然强大,但是有种杀鸡焉用牛刀的感觉,实际上我们只需要将jar包上传到服务器上然后执行一些命令就可以了。下面将演示使用插件实现一键发布。

1. 下载插件
pic
2. 配置服务器信息
pic
3. 添加运行环境
pic pic
  1. 服务器准备demo.pid文件

    进入jar包存放目录,建立 后缀为 .pid文件,该文件存的是项目的进程id。

  2. 服务器上编写start.sh文件

    vim start.sh
    

    将下面内容复制到文件里面

    # 存放的位置
    www_path=/usr/data/java/demo
    
    #Jenkins中编译好的jar名称
    jar_name=demo.jar
    
    #pid位置
    pid_path=/usr/data/java/demo/demo.pid
    
    #获取运行编译好的进程ID,便于我们在重新部署项目的时候先杀掉以前的进程
    pid=$(cat ${pid_path})
    
    #进入最后指定存放jar的位置
    cd  ${www_path}
    
    #杀掉以前可能启动的项目进程,第一次构建将下面这行注释掉
    kill -9 ${pid}
    
    #启动jar,指定SpringBoot的profiles为test,后台启动
    nohup java -jar ${jar_name} >/dev/null 2>&1&
    
    #将进程ID存入到shaw-web.pid文件中
    echo $! > ${pid_path}
    
  3. 然后回到idea,点击运行按钮

    敲黑板!!! 第一次部署将第5步中,kill 命令那行注释掉,之后在解开就可以

4. 插件部署测试
  1. 修改代码 return "王五";,点击运行

    pic
  2. 控制台

    pic
  3. 效果

    pic

四、部署比较

其实无论Jenkins发布和插件发布,得看自己的需求,Jenkins发布的好处是不需要任何ide,只需要将代码推送到git上,无论使用记事本还是浏览器上修改代码,最终推送到git上就可以打包,还有就是搭建好Jenkins后可以让领导发布,体现领导的价值~~~,我是喜欢插件部署,因为目前部署比较简单,比较轻,而且插件部署还可以部署到不同服务器上,另外采取Jenkins只能部署在Jenkins所在的服务器上,局限性太大了。

五、最后的话

上面演示的是单体SpringBoot的部署,每次部署都会将所有的依赖都打进去,我们可以将依赖的包单独放在服务器上,启动项目时候 指定下目录就可以,下次出个教程,当然还有前端vue的部署。如果帮到了你,希望点个赞支持一波。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值