SpringBoot集成Jenkins自动化本地部署

1.准备工作

1.1:前言

首先安装Jenkins之前,linux中必须安装好了JDK和Maven,如果还没有安装过,下面准备好安装教程,

Linux环境安装JDK:

Linux环境安装Maven:

1.1.1:安装
  • 在根目录下创建文件夹

mkdir jenkins

  • 下载linux jenkins ,官网地址:https://get.jenkins.io/redhat-stable/ 查看官方文档

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
  1. 然后修改/etc/init.d/jenkins文件 ,配置jdk安装路径
  1. 启动jenkins服务默认使用8080端口,启动前如果想修改端口号,可在/etc/sysconfig/jenkins中修改jenkins端口号
  1. 将jenkins用户改成root,上面jenkis注释
  2. 修改完成之后,重新启动一下jenkins,启动成功~
  1. 访问服务器ip:8070访问
  2. 会告诉你初始密码所在位置,一般是 /var/lib/jenkins/secrets/initialAdminPassword输入密码,进入系统页面,会提示创建用户,可以自行创建用户,输入用户名和密码.
  3. 先看是否插件配置齐全,然后配置全局变量信息,比如maven,git,jdk路径信息,具体操作步骤如下:
    构建maven项目,使用gitlab仓库,必备的几个插件有maven-intergration(此处下面还有一个maven安装不要忘记(否则会打包失败,而且界面会提示找不到pom.xml)), publish-over-ssh等
1.1.2:创建一个jenkins任务
  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 "启动成功!"

如果和你部署的不在同一台服务器

springboot搭建自动化测试平台 自动化部署springboot项目_jenkins

附上解释:

  1. 本地进行构建:

springboot搭建自动化测试平台 自动化部署springboot项目_linux_02

springboot搭建自动化测试平台 自动化部署springboot项目_自动化_03

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

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

3.1:准备

  1. 安装gogs
  2. 安装jenkins

3.2:操作

  1. 点击可选插件,搜索gogs,我这里已经安装了,所以选的已安装

springboot搭建自动化测试平台 自动化部署springboot项目_自动化_04

springboot搭建自动化测试平台 自动化部署springboot项目_springboot搭建自动化测试平台_05

springboot搭建自动化测试平台 自动化部署springboot项目_linux_06

说明:这里的推送地址是***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具体实现的功能,公司当中只是自己构建项目从来没有安装和配置,其中还是有非常多的坑的 。

给自己做个标记。