部署项目是开发人员日常工作的一部分,减少开发人员部署项目的难度和复杂度十分重要。一般稍微大一点的公司都有自己的 devops 方案,会使用一些 CI/CD 工具来部署项目,很多公司使用 Jenkins 来部署项目,或者开发自己的流水线部署工具。
但是,对于我们个人开发而言,平时周末写一些项目,架构也不复杂,其实不太需要使用那些庞大的工具(相当吃内存)。
就以本站而言,本站目前处于持续开发中,一旦发现Bug或者自己加新功能后,希望马上快速方便的部署。
所以,这时候,我们可以写一个简单的 shell 来脚本来帮我们做这些事情。
主要内容包括:git pull 代码、mvn 打包项目、杀死原先进程、运行 jar 项目
以本站项目为例
如图分别在项目根目录新建 bin/sens.sh 和 deploy.sh
准备
1、将代码上传到 GitHub,目前使用的是私有仓库
2、登录 Linux 服务器,安装 git 和 maven 并配置环境变量
3、git clone 项目
4、尝试 git pull,设置保存密码(即确保 pull 的时候不需要提示输入密码)
脚本代码如下
1、sens.sh 代码如下
#!/bin/bash
APP_NAME=sens-bootstrap-1.0-SNAPSHOT.jar
usage() {
echo "用法: sh sens.sh [start(启动)|stop(停止)|restart(重启)|status(状态)]"
exit 1
}
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} 正在运行。 pid=${pid} ."
else
nohup java -server -Xms2048m -Xmx2048m -Xmn680m -Xloggc:/www/wwwroot/sens-parent-back/gc.log -jar $APP_NAME > /dev/null 2>&1 &
echo "${APP_NAME}启动 成功,请查看日志确保运行正常。"
fi
}
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "${pid} 进程已被杀死,程序停止运行"
else
echo "${APP_NAME} 没有运行。"
fi
}
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} 正在运行。Pid is ${pid}"
else
echo "${APP_NAME} 没有运行。"
fi
}
restart(){
stop
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
注意:APP_NAME 是项目打包后的 jar 名称,注意修改 start() 里的 java 运行参数
2、deploy.sh 代码如下
#!/bin/bash
# 指定SENS的根目录,请按实际修改
SENS_DIR="/www/wwwroot/sens-parent-back"
# 拉取最新的源码
git pull
#echo "代码拉取完毕!"
# 进入SENS根目录
cd $SENS_DIR
# 停止SENS
sh $SENS_DIR/bin/sens.sh stop
# 设置环境变量,执行打包
mvn clean package -Dmaven.test.skip=true
echo "代码打包完毕!"
# 进入打包好的SENS目录
cd $SENS_DIR/sens-bootstrap/target
# 运行SENS
sh $SENS_DIR/bin/sens.sh start
echo "部署完毕,Enjoy!"
注意:SENS_DIR 是Linux服务器上项目的地址
然后每次修改代码后,只需要本地 commit 并 push 代码
然后在 Linux 上项目所在目录执行 sh deploy.sh 即可,一定程度上让自己偷点懒!
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏