分享一个手写的Linux自动化部署脚本

分享一个手写的Linux自动化部署脚本

基于没有使用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="后台启动程序";以下的代码全部注掉

本文由 在码圈 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
原文链接:https://www.arcinbj.com/archives/linux-01
最后更新于:2020-04-01 17:34:35

请博主喝咖啡 ☕.