美文网首页
SpringBoot集成Jenkins自动化本地单体应用部署

SpringBoot集成Jenkins自动化本地单体应用部署

作者: Java小白笔记 | 来源:发表于2021-12-24 16:44 被阅读0次

    SpringBoot集成Jenkins自动化本地部署

    1.准备工作

    1.1:前言

    首先安装Jenkins之前,linux中必须安装好了JDK和Maven,如果还没有安装过,下面准备好安装教程, > > Linux环境安装JDK:https://www.cnblogs.com/xuliangxing/p/7066913.html > > Linux环境安装Maven:https://blog.csdn.net/qq_35868412/article/details/89471735

    1.1.1:安装

    image-20211224155208398 > > - > sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo > sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key > sudo yum upgrade > sudo yum install epel-release java-8-openjdk-devel > sudo yum install jenkins > sudo systemctl daemon-reload > > > - whereis jenkins 命令查看jenkins的安装目录 > > - 如有异常:Job for jenkins.service failed because the control process exited with error code > > > 1. 我jenkins中的没有配置jdk的路径 mvn -v 可显示路径 或者ps -ef |grep java > > > > image image-20211224155942075 > > > > 2. 然后修改/etc/init.d/jenkins文件 ,配置jdk安装路径 > > > > image image-20211224160011853 > > > > 3. 启动jenkins服务默认使用8080端口,启动前如果想修改端口号,可在/etc/sysconfig/jenkins中修改jenkins端口号 > > > > image image-20211224160228788 > > > > 4. 将jenkins用户改成root,上面jenkis注释 > > > > 5. 修改完成之后,重新启动一下jenkins,启动成功~ > > > > image image-20211224160057030 > > > > 6. 访问服务器ip:8070访问 > > > > 7. 会告诉你初始密码所在位置,一般是 /var/lib/jenkins/secrets/initialAdminPassword输入密码,进入系统页面,会提示创建用户,可以自行创建用户,输入用户名和密码. > > > > 8. 先看是否插件配置齐全,然后配置全局变量信息,比如maven,git,jdk路径信息,具体操作步骤如下: > > 构建maven项目,使用gitlab仓库,必备的几个插件有maven-intergration(此处下面还有一个maven安装不要忘记(否则会打包失败,而且界面会提示找不到pom.xml)), publish-over-ssh等 > > > > 9. image image-20211224160749109 > > > > 10. image image-20211224160805756 > > > > 11. image image-20211224160819177

    1.1.2:创建一个jenkins任务

    1. image
    image-20211224161004320 > > 2. image image-20211224161022765 > > 3. image image-20211224161035118 > > 4. image image-20211224161049592 > > 5. image image-20211224161103179
    1. 注意:(jenkins安装和你部署的项目在同一台服务器选择执行sheel)

      #!/bin/bash 
             
      #export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
      export BUILD_ID=dontKillMe
             
      #Jenkins中编译好的jar名称
      jarName=sannuo-1.0-SNAPSHOT.jar
            
      #jenkins任务名称
      pathName=sannuo
            
      #自定义项目名称
      usePathName=/data/sinocare/sannuojarproject
      
      
      echo "拷贝文件"
      rm -rf $usePathName/$jarName
      cp /var/lib/jenkins/workspace/$pathName/target/$jarName $usePathName/
      echo "切换路径"
      cd $usePathName/
      echo "执行脚本"
      ./auto_deploy.sh restart
      echo "启动成功!"
      
    如果和你部署的不在同一台服务器 > > image
    image-20211224161348949 > > 附上解释: > > 7. 本地进行构建: > > image image-20211224161829709 > > image image-20211224161853286 > > image image-20211224162017448

    > > > 说明:具体详细的都在脚本里面。脚本会贴出来 白色的.sh 文件为不可执行文件,chmod +x xx.sh

    3.配置web钩子自动部署(Gogs + jenkins 实现自动部署)

    3.1:准备

    1. 安装gogs > 2. 安装jenkins

    3.2:操作

    1. 点击可选插件,搜索gogs,我这里已经安装了,所以选的已安装 > > image
    image-20211224162416044 > > image image-20211224162507111 > > image image-20211224162549242 > > image image-20211224162652042 > > > 说明:这里的推送地址是http://jenkins地址:端口号/gogs-webhook/?job=test,这里的test是要与上面在jenkins里面的任务名一致。触发web钩子的事件可以自己设置什么样的事件去触发jenkins的构建。 > > > > 然后返回可以正常启动。如果gogs配置钩子的过程当中没有配置密钥。在jenkins中什么都不需要点。

    4.脚本

    4.1:启动脚本

      #!/bin/bash
    # 定义变量
    # 要运行的jar包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
    JAR_NAME="/data/sinocare/sannuojarproject/sannuo-1.0-SNAPSHOT.jar"
    # 日志路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
    LOG_PATh="/data/sinocare/sannuojarproject/main.log"
    
    
    # 如果输入格式不对,给出提示!
    tips() {
            echo ""
            echo "WARNING!!!......Tips, please use command: sh auto_deploy.sh [start|stop|restart|status].   For example: sh auto_deploy.sh start  "
            echo ""
            exit 1
    }
    
    
    # 启动方法
    start() {
            # 重新获取一下pid,因为其它操作如stop会导致pid的状态更新
            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
            # -z 表示如果$pid为空时执行
            if [ -z $pid ]; then
                    # 生产环境输出日志和错误日志都不打印
                    #nohup java -jar $JAR_NAME > /dev/null 2>&1 &
                    # 调试时可用这个命令打印启动 
                nohup java -jar $JAR_NAME > $LOG_PATh 2>&1  &
            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
                    echo ""
            echo "Service ${JAR_NAME} is starting!pid=${pid}"
                    echo "........................Here is the log.............................."
                    echo "....................................................................."
            #tail -f $LOG_PATh
                    echo "........................Start successfully!........................."
            else
                    echo ""
                    echo "Service ${JAR_NAME} is already running,it's pid = ${pid}. If necessary, please use command: sh auto_deploy.sh restart."
                    echo ""
            fi
    }
                 
    # 停止方法
    stop() {
                    # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
            # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
            if [ -z $pid ]; then 
                    echo ""
            echo "Service ${JAR_NAME} is not running! It's not necessary to stop it!"
                    echo ""
            else
                    kill -9 $pid
                    echo ""
                    echo "Service stop successfully!pid:${pid} which has been killed forcibly!"
                    echo ""
            fi
    }
    
    # 输出运行状态方法
    status() {
            # 重新获取一下pid,因为其它操作如stop、restart、start等会导致pid的状态更新
            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
            # -z 表示如果$pid为空时执行。注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
            if [ -z $pid ];then
                    echo ""
            echo "Service ${JAR_NAME} is not running!"
                    echo ""
            else
                    echo ""
            echo "Service ${JAR_NAME} is running. It's pid=${pid}"
                    echo ""
            fi
    }
    
    # 重启方法
    restart() {
            echo ""
            echo ".............................Restarting.............................."
            echo "....................................................................."
                    # 重新获取一下pid,因为其它操作如start会导致pid的状态更新
            pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
            # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
            if [ ! -z $pid ]; then
                    kill -9 $pid
            fi
            start
            echo "....................Restart successfully!..........................."
    }
    
    # 根据输入参数执行对应方法,不输入则执行tips提示方法
    case "$1" in
       "start")
         start
         ;;
       "stop")
         stop
         ;;
       "status")
         status
         ;;
       "restart")
         restart
         ;;
       *)
         tips
         ;;
    esac   
    

    需要自己好好理解下,想明白jenkins具体实现的功能,公司当中只是自己构建项目从来没有安装和配置,其中还是有非常多的坑的 。

    给自己做个标记。

    附上好文:

    如何启动jar:https://app.yinxiang.com/fx/4ba1a688-6c6a-4c74-bc25-5804dff2b104

    Linux环境下安装Jenkins(超详细):https://blog.csdn.net/qq_35868412/article/details/89475386

    centos7使用jenkins自动化部署Spring boot项目(全):https://blog.csdn.net/lvxiucai/article/details/98979157

    ERROR: Maven JVM terminated unexpectedly with exit code 137解决:https://blog.csdn.net/u014204541/article/details/102671182

    linux安装jenkins并远程部署springboot项目:https://blog.csdn.net/laidanlove250/article/details/103243020

    相关文章

      网友评论

          本文标题:SpringBoot集成Jenkins自动化本地单体应用部署

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