Java项目稳定部署 旧城等待, 2024-03-26 21:06 16阅读 0赞 ## 使用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 关闭容器的标签限制
还没有评论,来说两句吧...