美文网首页Spring 框架插件大师Springboot
Jenkins一键分布式部署springboot项目

Jenkins一键分布式部署springboot项目

作者: Jerry_Liang | 来源:发表于2019-05-13 20:09 被阅读287次

    一、安装与启动

    可参考我的上一篇关于jenkins的博客:https://www.jianshu.com/p/cfdf0d90185e

    二、插件准备

    1.maven项目插件
    • 查看系统管理-->插件管理-->已安装插件中,过滤框中输入Maven Integration plugin,搜索是否已安装Maven Integration plugin插件;
    • 若未安装,则可到系统管理-->插件管理-->可选插件中,过滤框中输入Maven Integration plugin,勾选中后点直接安装。
    2.节点管理插件
    • 操作步骤同上,该插件名为Publish Over SSH

    三、配置系统设置

    1.配置全局工具
    • 系统管理-->全局工具配置中,配置Maven、Git、Gradle或Docker等全局工具;
    • 这一步按需配置(本次例子只需要Maven),这里以配置Maven为例,如下图;


      maven配置
    • 由于我虚拟机上并没有安装maven,所以我选择使用的是自动安装。
    2.系统设置
    • jenkins Location:URL为我们虚拟机的ip地址加jenkins启动时开放的端口号(如下图);


      jenkins location
    • SSH Server管理(如下图):若需要多台,点新增再添加即可。需要注意的是,如果没有配置免密登录的话,需要点击高级,勾选Use password authentication, or use a different key ,并在Passphrase/Password这一栏中输入虚拟机远程登录密码。
      ssh server配置
    3.新建maven项目
    构建maven项目
    4.设置
    • 设置项目的构建策略与仓库地址


      General
    • 源码管理设置


      源码管理
    • 其中Credentials添加如下:输入仓库用户名和密码,描述是为了区分该验证是什么(jenkins会保存一系列我们使用的credentials)可写可不写,推荐写


      credentials设置
    • 构建触发器


      构建触发器
    • build与post steps设置,这里并没有跳过测试,所以会在构建的时候进行测试


      build
    • 若不知道pom.xml在哪,可以先执行一次构建,构建会把代码克隆下来,我们可以在工作空间中看到,如下图所示


      工作空间
    • 构建后操作中选择Send build artifacts Over SSH,因为我们在第2步系统设置中将SSH server远程工作目录为/usr/local,此处又将路径设置为jenkins-jar/,由此最终将jar包传输到服务器中的路径是/usr/local/jenkins-jar
      选择构建后操作
      设置构建后操作
    • 上一步中的Exec command是我们要运行的执令,此处运行了我自己写的一个叫hello.sh的启动脚本,同样,如果我们要一次部署到多台服务器上的话,只需要点击Add Transfer Set再和上图一样设置另一台服务器即可;
    • 点击保存。

    四、启动脚本编写

    以上jenkins帮我们做了事情主要有如下几个:

    • 从仓库中克隆代码;
    • maven的clean install
    • 当build成功后,将相应的文件传输到我们指定的服务器中(此处传输的是jar包);
    • 定时重复上述步骤。

    由此可见,jenkins并没有使我们项目启动起来,为此我们需要编写启动脚本。
    脚本内容大致如下(欢迎指正-)

    #!/bin/bash
    function killproject()
    {
    #由于我这边多个项目jar包名一致了,所以并没有用 ps -ef | grep jar包名 来查进程id,而是通过端口号来查的
      project_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
      if [  $project_pid > 0 ];then
            echo "项目已经启动了,开始关闭项目,项目pid为: $project_pid "
            kill -9 $(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
            echo '项目关闭成功,开始重启项目。。。'
      else
            echo "项目未启动,直接启动"
      fi
    }
    function start_project()
    {
            source /etc/profile
            echo '正在启动项目。。。'
            cd /usr/local/jenkins-jar/
            nohup java -jar demo-0.0.1-SNAPSHOT.jar >warpper.log &2>1 &
    
    }
    function check_project()
    {
      check_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
      if [ $check_pid  > 0 ];then
            echo "project is start and  pid = : $check_pid  "
      else
            echo "project are not start"
      fi
    
    }
    killproject
    start_project
    sleep 10
    check_project
    
    

    代码分析,其中:

    • killproject()函数作用是查看系统中该项目是否已启动,若已启动,则先kill掉该进程,再启动;若未启动,则直接启动;
    • start_project()函数作用是进入我的jar包存储路径,并后台运行,函数中的source /etc/profile目的是使项目可以后台启动(其实我没加的时候,后台启动项目一直不能用,报错找不到java环境);
    • check_project()函数作用是检查项目是否正常启动,可以在jenkins控制台中看到输出信息;
    • sleep 10是为了等待我的springboot启动完,然后我们查看它的进程id.

    五、构建项目

    • 点击立即构建,就可以完成项目的自动部署了。


      部分控制台输出
    • 进入到虚拟机中,使用netstat -lnp | grep 18099可以验证项目是否已启动。
    • 有时候可能会在控制台输出project are not start,我不是很清楚是否是我设置的睡眠时间短了(为此,我们初次测试可以去虚拟机中查看项目是否启动)。

    相关文章

      网友评论

        本文标题:Jenkins一键分布式部署springboot项目

        本文链接:https://www.haomeiwen.com/subject/vfqraqtx.html