半自动化部署脚本 (需要手动输入r,来执行拉取代码,打包,停止旧的服务,备份旧的包,部署新的包,打印日志等)。如果要配置全自动化,可以通过监听git提交也就是所谓的钩子,检测提交内容msg中是否含有某一个信息,如publish,进行触发脚步部署。当然也可以根据不同的信息,部署不同的环境(调不同的脚本)
- 效果:想要部署的项目时,登录服务器执行ru 即可(使用的是别名)
- 这里是需要手动执行,因此是半自动化部署。
- 如果要配置全自动化,可以通过监听git提交也就是所谓的钩子检测提交内容msg中是否含有某一个信息,如publish,进行触发脚步部署。当然也可以根据不同的信息,部署不同的环境(调不同的脚本)也就是,开发人员提交代码信息的时候,将commit 内容除了必要的信息提交外,再加上关键字如publish,git 钩子检测到有关键字过来,
- 促发脚本去执行部署,达到自动化部署的效果。当然这些功能jekens也是自带有的。个人觉得jekens比较臃肿。
- 如果要定时部署的话,其实更简单了,只需要在linux配置定时器即可
- 效果图如下
1:保持脚本 run.sh
2:更改为可执行文件 chmod +777 run.sh
3: mv run.sh /usr/bin //也可以使用软链接的方式,这里是直接copy过去了
4:vim ~/.bashrc 添加 alias r='run.sh' source ~/.bashrc即可
脚本如下:
#!/bin/sh echo =============================================================== echo 欢迎使用【XXXX】---自动化部署脚本启动 echo =============================================================== echo 即将为您部署系统应用... sleep 1 APP_NAME=XXX CODE_PATH=/tmp/publish/code PUBLISH_PATH=/root/project echo ====》1/14:准备从Git仓库拉取最新代码 cd $CODE_PATH sleep 0.5 echo ====》2/14:开始从Git仓库拉取最新代码 sleep 0.5 git pull if (( $? )) then echo "====》3/14代码拉取失败,已为您退出,请核对" exit 1 else echo "====》3/14分支iot最新代码拉取成功" fi sleep 0.5 echo ====》4/14:开始打包... mvn clean package -Dmaven.test.skip=true if (( $? )) then echo "====》5/14:打包失败,请查看,已为您退出" exit 1 else echo "====》5/14:打包完成,即将为您部署" fi echo ====》6/14:停止旧系统 sleep 0.5 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo '====》7/14:旧系统停止中...' kill -15 $tpid fi sleep 0.5 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` if [ ${tpid} ]; then echo '====》8/14:旧系统已停止!' kill -9 $tpid else echo '====》8/14:旧系统停止成功!' fi echo ====》9/14:开始备份旧系统部署包 sleep 0.5 mv $PUBLISH_PATH/XXX.jar $PUBLISH_PATH/back/XXX-`date +"%m%d_%H_%M_%S"`.jar echo ====》10/14:备份成功 sleep 0.5 echo ====》11/14:复制新文件到部署路径 mv $CODE_PATH/target/XXX.jar $PUBLISH_PATH/ cd $PUBLISH_PATH/ sleep 0.5 echo ====》12/14:开始部署项目 nohup java -jar -Xms2048m -Xmx2048m -XX:+HeapDumpOnOutOfMemoryError XXX.jar --spring.profiles.active=dev > /root/project/logs/XXX.log 2>&1 & if (( $? )) then echo "====》13/14:部署项目失败!" exit 1 else echo "====》13/14:项目启动中!" fi echo ====》14/14:即将为您打印log日志 sleep 0.5 tail -1000f /root/topoda/logs/XXX.log
6:如果要配置全自动化,可以通过监听git提交也就是所谓的钩子,检测提交内容msg中是否含有某一个信息,如publish,进行触发脚步部署。当然也可以根据不同的信息,部署不同的环境(调不同的脚本),也就是,开发人员提交代码信息的时候,将commit 内容除了必要的信息提交外,再加上关键字如publish,git 钩子检测到有关键字过来,促发脚本去执行部署,达到自动化部署的效果。当然这些功能jekens也是自带有的。个人觉得jekens比较臃肿。