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:安装
- 在根目录下创建文件夹 > >
> 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.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 "启动成功!"
如果和你部署的不在同一台服务器 > >
> > > 说明:具体详细的都在脚本里面。脚本会贴出来 白色的.sh 文件为不可执行文件,chmod +x xx.sh
3.配置web钩子自动部署(Gogs + jenkins 实现自动部署)
3.1:准备
1. 安装gogs > 2. 安装jenkins
3.2:操作
1. 点击可选插件,搜索gogs,我这里已经安装了,所以选的已安装 > >
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