该脚本实现的功能是通过输入(服务名称)以及(版本号)匹配开发给的jar包,放到指定的服务目录下后通过Dockerfile打包镜像,然后自动修改yaml文件版本号进行更新升级。弊端是在服务名相同且更长的时候,需要先升级服务名更长的,不然会将相同服务名的包全都拉过去。
使用该脚本需要满足的条件是
1,有yaml文件启动的服务
2,使用dockerfile进行打jar包的服务
各位可自行更改,最后调用的查看服务启动状态脚本也附上了
#!/bin/bash
#服务路径
servicen="/home/bxyd"
new1="/home/newfile"
#查询/home/usert下所有jar包
echo -e "\033[32m #################################################################################################### \033[0m"
echo -e "\033[32m # 注意:多个服务名多字段相同的情况下先升级包名更长的 # \033[0m"
echo -e "\033[32m # 注意:打包中途ctrl+C会导致dockerfile文件未注释 # \033[0m"
echo -e "\033[32m #################################################################################################### \033[0m"
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>所有已上传的包名<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
find /home/usert/ -name '*.jar'
#请输入服务名称
#read -p "请输入服务名称:" name
read -p "请输入需要升级的服务名:" name1
echo $name1 > /root/file/files5
find1=`find /home/usert/ -name $name1'*.jar'`
#移动jar包到升级目录
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>jar包正在拼命移动中请稍等<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
mv $find1 $new1
#获取新包名称
dl=$(ls /home/newfile/)
path=$(find /home/bxyd/ -name ${dl} | awk -F"/" '{print $4}')
new3="/home/bxyd/$path/$dl"
new2="/home/newfile/$dl"
#设置yaml路径变量
path4=/root/service-pod/
#判断是否有对应yaml
if [ -f "$path$name1.yaml" ];then
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改服务版本号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
#获取版本号-版本号自动+1
version=`cat $path4$name1.yaml | grep image: | awk -F "-" '{print $NF}'`
a=$((1+${version//$'\r'}))
#替换dockerfile包
if [ -f "$new2" ];then
sed -i "s/#ADD $dl/ADD $dl/" /$servicen/$path/Dockerfile
sed -i "s/#$dl/$dl/" /$servicen/$path/Dockerfile
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
#删除旧包
if [ -f "$new3" ];then
rm -rf $new3
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>删除旧包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>删除旧包失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
##移动新包
if [ -f "$new2" ]; then
cp /$new1/$dl /$servicen/$path/
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>复制新包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>文件不存在,已退出脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
#打包上传
cd /$servicen/$path/
docker build -t cr.registry.sd-1.res.sgmc.sgcc.com.cn/dwzyywzt-nari/dwzyywzt-nari:$name1-$a .
if [ $? -eq 0 ];then
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>docker build打包成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>docker build打包失败,已退出 脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
docker push cr.registry.sd-1.res.sgmc.sgcc.com.cn/dwzyywzt-nari/dwzyywzt-nari:$name1-$a
if [ $? -eq 0 ];then
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>上传仓库成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>上传失败,已退出脚本<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
#注释dockerfile
if [ -f "$new3" ];then
sed -i "s/ADD $dl/#ADD $dl/" /$servicen/$path/Dockerfile
sed -i -z "s/$dl/#$dl/3" /$servicen/$path/Dockerfile
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
else
mv $new2 /home/usert/baaa
echo -e "\033[31m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改dockerfile失败<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
exit 255
fi
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改版本号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
rm -f /$new1/$dl
sed -i "22s/${version}/${a}/g" $path4$name1.yaml
#开始升级
kubectl -n dwzy apply -f $path4$name1.yaml
echo -e "\033[32m >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$name1升级完成<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \033[0m"
sh ~/select/pod-status5.sh
#!/bin/bash
name=`cat /root/file/files5`
echo -e "--------------------------------------------------开始检查pod启动状态------------------------------------------"
n=0
while(($n<=100))
do kubectl -n dwzy get pods | grep ${name}
echo -e "---------------------------------------------------------------------------------------------------------------"
n=$((n + 1))
sleep 6
done