之前的打包发布方式都是自己电脑上打包好,然后上传linux服务器,再进行发布,比较麻烦,想着写一个一键发布脚本。
1 安装 subversion
使用yum install subversion 非常简单,若要离线安装,自己百度下离线安装svn,都是有详细教程的
2 检出自己需要的代码
下载代码同样非常简单,自己先建一个目录makdir 文件夹名字
然后svn checkout XXXXX (XXXX为你自己项目svn地址)
3 安装maven
先去官网下载一个最新的压缩包,我用的是apache-maven-3.8.1-bin.tar.gz下载后先建一个文件夹,然后将压缩包放到改文件夹下,进行解压
tar -zxvf apache-maven-3.8.1-bin.tar.gz
然后配置下本地仓库
cd conf #找到settings.xml 文件,修改地址
vim settings.xml
地址自己可以随便建一个。配置maven环境变量,编辑:vi /etc/profile 文件,翻到最后一行加上 export MAVEN_HOME=/usr/local/apache-maven-3.8.1 export PATH=
P
A
T
H
:
PATH:
PATH:MAVEN_HOME/bin 保存退出
vi /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.8.1
export PATH=$PATH:$MAVEN_HOME/bin
重新加载一下,source /etc/profile 使新增配置生效,如下:
source /etc/profile
这样就安装好maven了,测试下
mvn -v
这样就说明安装好了
4 打包发布
由于maven比较大,我是将本地的直接上传到了服务器上面的仓库中,
打包命令 mvn clean install -Psit
将打好的包放到你要发布的目录下,启动即可
5 一键发布脚本
一键发布脚本是有两个脚本组成的,即打包脚本加发布脚本
打包脚本:
#!/bin/sh
#进入到你代码的目录
cd /usr/.maven/xxxxxxx/xxxxxx/
#svn更新开始
echo '=================SVN更新开始==============='
svn update
#svn更新结束
echo '=================SVN更新结束==============='
#删除旧包
rm -rf target
#开始打包
echo '=================开始打包==============='
mvn clean install -Psit
echo '=================开始结束==============='
#成功后,复制jar包到运行目录
cd target
mv xxxxxxx.jar /usr/credit
发布脚本:
#!/bin/bash
APP_NAME=xxxxxxx.jar
servicedir=/usr/credit
curtime=$(date "+%Y%m%d%H%M%S")
LOG_OPTS=/usr/credit/log/log.log
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
cp $servicedir/$APP_NAME /usr/credit/bak/xxxxxxxxxx-$curtime.jar
cp $servicedir/log/log.log $servicedir/log/log_$curtime.log
echo > $servicedir/log/log.log
nohup java -jar $JAVA_OPTS $servicedir/$APP_NAME >$servicedir/log/log.log 10M 2>&1 &
while [ -f $LOG_OPTS ]
do
result=`grep "Started" $LOG_OPTS`
resultError=`grep "failed" $LOG_OPTS`
if [[ "$result" != "" ]]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") 启动成功"
break
else
if [[ "$resultError" != "" ]]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") 启动失败,错误信息请查看日志/usr/credit/log/log.log"
break
else
echo "$(date "+%Y-%m-%d %H:%M:%S") 启动中,请稍后...."
fi
sleep 10s
fi
done
#echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
将两个脚本整合成一个
#!/bin/bash
sh /usr/credit/.script/pkgCredit.sh
sh /usr/credit/.script/runCredit.sh restart
再自定义一个命令
vi /root/.bashrc
alias 你自定的命令=系统原来的命令
alias deployCredit='/usr/credit/relCredit.sh'
输入source .bashrc
命令就会启动,以后输入你自定义的命令就是执行系统本来的命令啦。
source .bashrc
这样就都配置完了,不管再啥目录直接敲命令deployCredit 就可以一键打包发布了