基于没有使用Docker或者K8S的服务器
有些项目目前没有使用自动化运维Docker或者K8s来做部署。
就拿简单的Tomcat项目来说,有时候部署起来还是比较麻烦的(针对war包部署)。
这里小编分享一套自用的自动化部署脚本,还在为部署项目发愁的小伙伴赶快Get到吧!
需要自己稍微 分析一下 改一改部署路径 war包路径
#!/bin/bash
#Linux 脚本自动部署项目
## 配置-conf
#配置文件路径
confPath=/root/project-conf
#备份文件目录
backupPath=/var/data/project-backup
#war包文件路径
warPath=/root/tempFile
#Tomcat 路径
TomcatPath=/root/apache-tomcat-7.0.93
#项目名
projectName=demo
#版本配置文件名
propertiesName=demo
##---------------------------------配置-----------------------------------
## 非经常更改性配置
#标题
title=开始自动部署项目
#当前用户
USER=$(whoami)
#时间
time=$(date "+%Y-%m-%d %H:%M:%S")
#版本号
newVersion=""
#当前目录
pd=`pwd`
#Tomcat容器名
containerName=tomcat
#logs日志路径
logPath=$pd/logs
#创建路径
mkdir -p $logPath
#log文件
logFile=$logPath/tomcat-builder.log
logErrorFile=$logPath/tomcat-builder-error.log
#参数
errorParam="";
infoParam="";
#错误日志
function log_error (){
#时间
timeTemp=$(date "+%Y-%m-%d %H:%M:%S");
logTemp="$timeTemp-$USER - Error:$errorParam";
#输出日志
echo "";
echo "$logTemp";
#输出日志到文件
echo "" >> $logErrorFile;
echo "--------------------------------------------------------------" >> $logErrorFile;
echo "$logTemp" >> $logErrorFile;
# 清空日志变量
errorParam="";
}
#日志
function log_print (){
#时间
timeTemp=$(date "+%Y-%m-%d %H:%M:%S");
logTemp="$timeTemp-$USER - $infoParam";
#输出日志
echo "";
echo "$logTemp";
#输出日志到文件
echo "" >> $logFile;
echo "--------------------------------------------------------------" >> $logFile;
echo "$logTemp" >> $logFile;
# 清空日志变量
infoParam="";
}
##-----------------------------------执行过程------------------------------------------------
echo "" >> $logFile;
echo "--------------------------------------------------------------" >> $logFile;
echo "#################### $title-$time ####################" >> $logFile;
echo "#################### $title-$time ####################";
#判断文件是否存在
if [ -f "$warPath/$projectName.war" ];then
infoParam="$projectName.war 文件存在";
log_print;
else
errorParam="$projectName.war 文件不存在,请上传文件";
log_error;
exit 1;
fi
#循环取得参数
while [ $# -ge 2 ] ; do
case "$1" in
-version)
newVersion="$2";
shift 2
;;
*)
errorParam="不能识别的参数 $1." ;
exit 1 ;
break;;
esac
done
if [ -z "$newVersion" ]; then
errorParam="版本号不可为空";
log_error;
exit 1;
fi
# 如果 tomcat webapps 里 项目不为空
if [ -d "$TomcatPath/webapps/$projectName/" ];then
# 获取当前 项目版本号
backupVersion="";
oldPropertiesFilePath=$TomcatPath/webapps/$projectName/WEB-INF/classes/properties/$propertiesName.properties;
if [ -z "$backupVersion" ];then
if [ -f "$oldPropertiesFilePath" ];then
. $oldPropertiesFilePath
backupVersion=$(echo $version | sed 's/\r//')
fi
fi
backupVersion="$backupVersion-${time}";
#关闭tomcat
$TomcatPath/bin/shutdown.sh &
sleep 1;
#强制杀死进程
PROCESS=`ps -ef | grep $TomcatPath | grep -v grep | grep -v PPID | awk '{ print $2}' `
for i in $PROCESS
do
echo "Kill the $1 process [ $i ]"
kill -9 $i
done
# 备份文件
mkdir -p "$backupPath/$version";
mv $TomcatPath/webapps/$projectName "$backupPath/$backupVersion";
mv $TomcatPath/webapps/$projectName.war "$backupPath/$backupVersion";
infoParam="备份 文件夹-$projectName / 文件-$projectName.war 到 $backupPath/$backupVersion";
log_print;
fi
#创建解压war包路径
mkdir -p $TomcatPath/webapps/$projectName;
cd $TomcatPath/webapps/$projectName;
#拷贝源码war到tomcat路径下
cp $warPath/$projectName.war $TomcatPath/webapps/$projectName;
jar -xvf $projectName.war;
# 删除war包 暂时注掉 避免脚本中存在 rm危险指令
rm -rf $projectName.war;
# 删除静态文件
#rm -rf static;
infoParam="拷贝配置文件 $confPath";
log_print;
#拷贝配置文件 到当前位置
cp -r $confPath/. . ;
infoParam="替换现有配置文件版本 $version";
log_print;
#替换现有配置文件版本
nowPropertieFilePath=$TomcatPath/webapps/$projectName/WEB-INF/classes/properties/$propertiesName.properties
sed -i "s#^version=.*#version=$newVersion#g" $nowPropertieFilePath
echo "$newVersion ----------------------------"
infoParam="后台启动程序";
log_print;
#后台启动程序
$TomcatPath/bin/startup.sh &
infoParam="打印日志";
log_print;
tail -f -n 50 $TomcatPath/logs/catalina.out;
#退出
exit 1;
执行
./tomcat-bulider.sh -version 当前版本
Jenkins+Ansible
如果是Jenkins+Ansible的话 需要将
infoParam="后台启动程序";
以下的代码全部注掉