欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记一次公司项目docker镜像部署失败后的shell脚本部署

程序员文章站 2022-07-13 08:54:23
...

公司接了一个项目,给了外包来做,从做好到提测,终于要部署环境,可是问题也来了,竟然不能docker镜像部署,并且依赖的jar包运行还会报错,好在是一个maven的项目,那么只能自己手动打包,初期bug比较多,每次回归都要敲一堆重复的命令,很是繁琐,不得已还是得想一个一劳永逸的方案,这时shell的亮点就突出了。 

下面是shell脚本示例:从中学到了命令、文件、变量、文件夹等if条件判断,以及>日志从定向输出,还有&后台执行jar:

#!/bin/sh

propid=`ps -aux|grep 项目jar名 |grep -v grep| awk ' {print $2} '`

# $?判断上一个命令是否成功, 成功返回0,其他则失败,其实就是有数据返回
# -n "${var}" 判断非空字符

if [ -n "${propid}" ];then
	echo "存在进程: ${propid}"	
	kill -9 ${propid}
	echo "杀死进程:${propid}"
else
	echo "进程不存在"
fi

# shell脚本的命令最好不要使用别名命令
dirnum=`ls /tmp/ |grep tomcat |wc -l`

if [ ${dirnum} -gt 0 ];then
	echo "存在${dirnum}个tomcat目录"
	cd /tmp
        ls |grep tomcat |xargs rm -fr
	echo "删除tomcat*目录"
else
        echo "不存在tomcat目录"
fi

if [ -d "/data/git clone下的工程目录" ];then
   echo "存在并进入目录:/data/git clone下的工程目录"
   cd /data/git clone下的工程目录
else
   echo "目录不存在,不必创建,只需要在/data/目录下git clone git地址"
fi

# 进入木查看当前git分支,如果不是要pull的分支,则重新拉取,也可以使用命令直接切换需要的分支
# read -p

git pull > /data/git.log 

if [ $? -eq 0 ];then
	echo "进入目标目录mvn构建项目"	
	cd  "工程目录"
	mvn clean package -Dmaven.test.skip=true
	echo "打包完成"
else
	echo "代码为最新"
fi

if [ -f "/data/项目路径target下的xxx.jar" ];then
	echo "jar文件存在,进入目标目录启动应用"
	cd  直接进入存在的target目录下
	nohup java -jar xxx.jar >/data/logsserver.log 2>&1 &
	pidnum=`ps -aux|grep 项目jar名 |grep -v grep |awk '{print $2}'`
	echo "启动进程为:${pidnum}"

else
	echo "执行mvn package,可能打包失败,jar文件不存在"
fi