2023/9/4(shell自动化部署脚本编程)

91 阅读1分钟
#!/bin/bash  
#构建路径  
moduleName=$1  
#基础路径  
BasePath="/home/service/"  
  
#将要更新的文件  
updateFile=()  
#获取当前文件下文件  
getCurrentDirectoryFile(){  
files=()  
# 遍历当前目录下的所有文件  
for file in *; do  
# 判断是否是文件  
if [ -f "$file" ]; then  
files+=("$file")  
fi  
done  
  
# 遍历数组并输出文件名  
for file in "${files[@]}"; do  
  
if [[ "$file" == *.jar ]]; then  
# 使用cut命令分割字符串  
moduleName=$(echo "$file" | cut -d '-' -f 1-2)  
updateFile+=("$file")  
fi  
done  
}  
echo " 开始更新...."  
#判断参数是否为空  
if [ "$1" == "" ]; then  
getCurrentDirectoryFile  
echo "moduleName ===> $moduleName"  
echo " 模块名为空,将会根据$moduleName 进行更新或者以如下方式启动 ./update.sh oa-executive"  
fi  
  
  
  
#下面进行jar包替换以及备份  
  
#备份文件  
BackupFile(){  
echo " 备份$1"  
now=$(date +%Y%m%d)  
mv $1 "$1.bak$now"  
echo " $1 ====> $1.bak$now"  
}  
  
updateFilePath(){  
for folder in "${updateFile[@]}"  
do  
echo " $folder"  
#更新文件路径  
updateFileDir=()  
# 使用find命令查找包含指定文件的文件夹  
updateFileDir=$(find "$BasePath" -name "$folder" -type f -exec dirname {} \; | sort -u)  
# 输出结果  
echo "文件 $folder 出现在以下文件夹中:"  
echo "$updateFileDir"  
# 遍历要更新的目录  
for dir in $updateFileDir  
do  
BackupFile $dir/$folder #备份  
cp $folder $dir/$folder #拷贝到对应目录  
done  
done  
}  
  
updateFilePath  
  
#  
# 下面是服务更新  
  
  
#检查哪些文件将会被更新  
getFlag(){  
if [ -f "$1" ]; then  
echo " 将会更新 $1"  
return 1  
else  
return 0  
fi  
}  
rpcPackage=$moduleName"-service-rpc-atf-5.0.0-SNAPSHOT.jar"  
#根据文件夹中所包含的文件进行更新  
getFlag "$moduleName-api.jar"  
ApiFlag=$?  
getFlag "$moduleName-service.jar"  
serviceFlag=$?  
getFlag "$rpcPackage"  
rpcFlag=$?  
  
if [ $rpcFlag == "1" ]; then  
if (( $serviceFlag == "0" )); then  
docker service update --force "$moduleName-service"  
fi  
fi  
  
if [ $ApiFlag == "1" ]; then  
docker service update --force "$moduleName-api"  
# 不能直接更新这样会导致后面代码不执行  
# docker service logs --tail 100 -f "$moduleName-api"  
  
fi  
  
if [ $serviceFlag == "1" ]; then  
docker service update --force "$moduleName-service"  
docker service logs --tail 100 -f "$moduleName-service"  
fi