Java项目稳定部署

本文介绍了如何使用Shell脚本来执行命令行操作,如Git切换分支、Maven打包,以及进程管理。同时,讲解了Docker的常用命令,包括查看容器、拉取镜像、删除镜像和容器等。文中通过一个简单的Shell脚本展示了如何部署和更新项目,包括编译打包、检查并杀死旧进程、构建Docker镜像以及运行新容器。
摘要由CSDN通过智能技术生成

使用Shell脚本部署

window系统有bat文件可以执行脚本,linux下可以使用shell执行脚本

shell语句

先来简单记录一下 shell 语句的含义:

  1. $# 代表参数的个数;
  2. -lt (less than) 小于 -gt ( greater than ) 大于 -eq ( equal ) 相等 -ne (not equal ) 不等 -ge (greater than or equal) 大于或等于 -le (less than or equal ) 小于或等于 ;
  3. echo 字符串输出,引号可以省略;
  4. $0 所写shell脚本本身名字,$1 脚本传入第一个参数, 2 脚本传入第二个参数, 2 脚本传入第二个参数, 2脚本传入第二个参数,$ 脚本运行的当前进程ID号,$! 后台运行的最后一个进程ID号;
  5. set -e 可以避免操作失败还继续往下执行的问题,在"set -e"之后出现的代码,一旦出现了返回值非零,整个脚本就会立即退出,set +e 当这句之后遇到非零的返回值,会继续执行,set -e 当这句之后遇到非零返回值,会直接退出;
  6. exit 0—是正常退出的命令,exit 1—是非正常退出的命令,echo $? 获取上次命令执行的结果,如果是0就是正常执行,如果非0就是执行出现了异常;
  7. {} 大括号,用户执行命令,{}中最后一个命令要用分号,第一个命令和左括号之前有一个空格,命令之间用;隔开;
  8. ()小括号,命令集合,括号中的命令会在子shell中执行,命令替换 $( cmd ) 等同于 cmd,将括号中的cmd执行,初始化数据 array = (a b c d)
  9. (()) 双小括号,进行整数运算的命令,不能对小数(浮点数)或者字符串进行运算
  10. function(){} - 代表一个函数
  11. if [-f /-z];then 执行内容 fi -f 如果存在且为普通文件为真; -z 如果字符串长度为零为真;-n 判断非空字符串为真
  12. $(cd dirname $0;pwd) 显示执行的脚本所在的目录,以绝对路径显示; pwd 显示当前敲的命令所在的目录,以绝对路径显示;
    注意:
    1、在shell中进行比较时,结果为0代表真,为1代表假。
    2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。

Docker 常用指令

docker  info/version #docker环境信息
docker ps # 查看运行的容器信息
docker ps -a # 所有容器信息
docker search xx #查找镜像
docker pull xx #拉取镜像
docker rmi -f 镜像ID/name #删除本地镜像
docker logs -f 容器ID #跟踪实时日志
docker top 容器ID # 查看容器中进程信息
docker inspect 容器ID/name #获取容器/镜像的元数据 -f :指定返回值的模板文件-s :显示总的文件大小--type :为指定类型返回JSON
docker inspect --format '{{.LogPath}}' 容器ID #查看某容器的日志地址
docker build #构建镜像
docker run #启动镜像
docker system prune #清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune -a #命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉

简单shell部署脚本实现

# 编译打包过程
set -e
cd /xx/xx # 进入项目目录
git checkout xxx #切换分支
git pull #拉取最新代码
cd /xx/xx/xx #进入项目具体模块
mvn clean install -Dmaven.test.skip=true #使用maven 打包
propid=`ps -aux|grep xx.jar |grep -v grep| awk ' {print $2}
#ps -ef/aux |grep java就是通过管道的方式,将ps命令查询出来的进程信息内容筛选出与jar进程相关的数据
#-v 参数,作用是反转查找,即过滤出除了grep的其他数据
#  awk ' {print $2} awk对每行处理 print打印对应第二行的数据 也就是 xx.jar的pid
if[-n "${proid}"]; then
	echo "存在进程: ${propid}"
	kill -9 ${proid}
	echo "杀死进程:${propid}"
eles
	echo "进程不存在"
fi
#生成docker镜像
set -e
cd /xxx/xxx # 找到DockerFile所存在的目录
docker build -t x source/xx/
# -f :指定要使用的Dockerfile路径 -t name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签
# 后面部分为Dockerfile路径
set +e
#关闭名为x的容器
docker kill x
#删除停止的容器
docker rm x
set -e
docker run --name x -d -it --net="host" \
	 -v /home/xx.properties:/opt/xx/application-admin.properties \
	 -v /opt/files:/opt/files \
	 -v /opt/logs:/opt/logs \
	 -v /home:/home \
	 --security-opt label:disable \
	  x
# -v 给容器挂载存储卷,挂载到容器的某个目录
# -d 指定容器运行于前台还是后台,默认为 false
# -i 打开 STDIN,用于控制台交互
# -t 分配 tty 设备,该可以支持终端登录,默认为 false
# -name 指定容器名字,后续可以通过名字进行容器管理,links 特性需要使用名字
# –net=“hose” 容器使用主机网络
#  --security-opt label:disable 关闭容器的标签限制

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值