Shell脚本自动发布springboot到docker容器中

简介: Shell脚本自动发布springboot到docker容器中

1. 脚本功能

1)自动替换jar包中的配置文件。

2)自动备份老版本的Jar包

3) 自动判断是初次启动还是更新服务

2. 脚本准备

进入/home目录新建springcloud文件夹,并进入

然后新建文件夹shell、DockerBuilder、Jar、Front

image.png

3. 环境变量配置

vi /etc/profile

在文件末尾追加如下环境变量

export DockerBuilder=/home/springcloud/DockerBuilder
export Jar=/home/springcloud/Jar
export Front=/home/springcloud/Front
export NginxHtml=/usr/springcloud/nginx/html
alias shell="cd /home/springcloud/shell"

刷新环境变量使其生效

source /etc/profile

配置全局java环境

1.查看已经安装的JDK
    yum list installed |grep java
  2.卸载CentOS系统Java环境
    yum -y remove java-1.8.0-openjdk*   *表示卸载所有openjdk相关文件输入 
  yum -y remove tzdata-java.noarch       卸载tzdata-java 
  3.查看yum库中的Java安装包
    yum -y list java*
  3.安装
  yum install java-1.8.0-openjdk*
  4.查看java版本
   java -version
  5.执行java,javac命令显示帮助信息则安装成功
  6.执行javac 报错:javac: command not found 解决方案:
  yum install java-1.8.0-openjdk-devel.x86_64

配置全局node环境

Nodejs官方版本

#安装源
curl -sL https://rpm.nodesource.com/setup_13.x | bash -
#安装Nodejs
yum -y install nodejs
#配置淘宝镜像
npm config set registry http://registry.npm.taobao.org/
#安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
#安装yarn
npm install yarn -g
#配置yarn淘宝镜像
yarn config set registry https://registry.npm.taobao.org -g
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
#检查yarn
yarn config get registry // https://registry.npm.taobao.org
yarn config get sass_binary_site // http://cdn.npm.taobao.org/dist/node-sass

4. 启动脚本

shell && sh test.sh

5. 微服务脚本

#!/bin/bash
#auth eric
#date 2021-08-13
#*********脚本入参#*********
appname=${0%\.*}
#Docker脚本位置
dockersrc=$DockerBuilder/$appname
#需要替换的包名称
bmc=$appname-server-web-1.0.jar
#需要替换的文件名称
file1=bootstrap.properties
file2=application.properties
#*********脚本入参#*********
#当前镜像版本
source /etc/profile
version="`date +%Y%m%d%H%M%S`"
echo '第一步:备份老版本'
if [ ! -d "$Jar/backup" ]; then
  echo "备份文件夹不存在,自动创建中";
  mkdir $Jar/backup;
fi
if [ -f "$dockersrc/$bmc" ];then
  echo "旧版本存在,自动备份中"
  mv $dockersrc/$bmc $Jar/backup/$bmc.$version
fi
echo '第二步:替换JAR包配置文件'
#找到替换文件路径
if [ ! -f  "$Jar/$bmc" ];then
  echo  "$Jar/$bmc更新包不存在"
  exit 1;
fi
#清除上一次的残余
cd $dockersrc
sudo rm -rf *.tar *.jar
cp $Jar/$bmc $dockersrc
filesrc1=`jar -tvf \$bmc|grep \$file1|awk '{print \$NF}'`
filesrc2=`jar -tvf \$bmc|grep \$file2|awk '{print \$NF}'`
if [ $? != 0 ]; then
    echo "java命令不存在,请安装JDK"
    exit 1;
fi
if [ -f "$dockersrc/$file1" ]; then
  echo '替换bootstrap配置文件'
  jar -xvf $bmc $filesrc1
  #删掉原文件
  sudo rm -f $filesrc1
  #换掉文件
  cp $file1 $filesrc1
  #重新将文件加入到jar包中
  jar -uvf $bmc $filesrc1
fi
if [ -f "$dockersrc/$file2" ]; then
  echo '替换application配置文件'
  jar -xvf $bmc $filesrc2
  #删掉原文件
  sudo rm -f $filesrc2
  #换掉文件
  cp $file2 $filesrc2
  #重新将文件加入到jar包中
  jar -uvf $bmc $filesrc2
fi
#删除解压文件
sudo rm -rf BOOT-INF
sudo rm -f *.tmp
echo '替换完成'
echo '第三步:查看是否有容器'
cd $dockersrc
imageresult=$(docker ps |grep  $appname | wc -l)
if [ $imageresult -eq 0 ]; 
then
  echo "不存在容器,需要初始化容器";
  docker build -t zhhq-$appname .
  if [ $? != 0 ]; 
  then
     echo "docker构建失败,请检查Docker" && exit 1
  fi
  if [[ "$appname" == "manager" ]]; 
  then
    echo "发布管理端后台"
    docker run -d --network host --name zhhq-$appname -p 7001:7001 --restart always zhhq-$appname
  elif [[ "$appname" == "user" ]];
  then
    echo "发布用户端后台"
    docker run -d --network host --name zhhq-$appname -p 7011:7011 --restart always zhhq-$appname
  else
    echo "发布$appname服务"
    docker run -d --name zhhq-$appname --restart always zhhq-$appname
  fi
  if [ $? -eq 0 ];
  then
    echo "$appname发布成功!"  && exit 0
  else
    echo -e '\033[31m[ error ]$appname 发布失败 \033[0m' && exit 1
  fi
  if [ $? -eq 0 ];
  then
    echo "$appname发布成功!"
  else
    echo -e '\033[31m[ error ]$appname 发布失败 \033[0m' && exit 1
  fi
else
  echo "已经存在容器,需要更新容器";
  conid=$(docker ps |grep  $appname |awk '{print $1}')
  docker cp $Jar/$appname-server-web-1.0.jar $conid:/$appname-server-web-1.0.jar
  docker restart $conid
  if [ $? -eq 0 ]; 
  then
    echo "发布成功!"
  else 
    echo -e '\033[31m[ error ] 发布失败 \033[0m' && exit 1
  fi
fi

6. 前端脚本

#!/bin/bash
#auth eric
#date 2021-08-13
#*********脚本入参#*********
bmc=smartapp
#*********脚本入参#*********
version="`date +%Y%m%d%H%M%S`"
echo '第一步:备份老版本'
if [ ! -d "$Front/backup" ]; then
  echo "备份文件夹不存在,自动创建中";
  mkdir $Front/backup;
fi
if [ ! -d "$Front/$bmc" ];then
  echo '更新包不存在请检查' && exit 1
else
  echo "准备更新$appname"
fi
if [ -f "$NginxHtml/$bmc" ];then
  echo "旧版本存在,自动备份中"
  mv $NginxHtml/$bmc $Front/backup/$bmc.$version
fi
mv $Front/$bmc $NginxHtml/
echo "发布成功!"


目录
相关文章
|
1月前
|
Java Docker 微服务
SpringBoot微服务打包Docker镜像
SpringBoot微服务打包Docker镜像
|
3月前
|
监控 Ubuntu Docker
如何在Docker容器启动时自动运行脚本
【8月更文挑战第13天】在Docker容器启动时自动运行脚本可通过以下方式实现:1) 使用`ENTRYPOINT`或`CMD`指令在Dockerfile中直接指定启动脚本,如`ENTRYPOINT ["/startup.sh"]`;2) 启动容器时通过`--entrypoint`参数指定脚本路径;3) 利用supervisor等进程管理工具自动启动与监控脚本,确保其稳定运行。确保脚本具有执行权限并正确设置依赖资源路径。
1136 1
|
3月前
|
Java Docker 容器
Docker SpringBoot Skywalking 8.1 agent
Docker SpringBoot Skywalking 8.1 agent
48 0
|
5月前
|
Java Docker 容器
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
239 2
|
4月前
|
前端开发 Java 应用服务中间件
Spring Boot 2.x 嵌入式 Servlet 容器
Spring Boot使用内嵌Tomcat,默认端口8080,可通过`application.properties`配置端口、上下文路径等。配置方式有两种:1) 直接在配置文件中添加`server.port`和`server.servlet.context-path`;2) 创建`WebServerFactoryCustomizer` Bean来自定义配置,如设置端口`factory.setPort(8083)`,这种方式优先级更高。
|
4月前
|
Java Spring 容器
深入理解Spring Boot中的容器与依赖注入
深入理解Spring Boot中的容器与依赖注入
|
5月前
|
Java API Docker
使用Spring Boot和Docker进行容器化部署
使用Spring Boot和Docker进行容器化部署
|
5月前
|
Java 应用服务中间件 Maven
SpringBoot(六)之内嵌容器
需要用哪个容器,就把其他两个容器注释掉。(
48 0
|
5月前
|
Java 应用服务中间件 容器
手写SpringBoot(二)之动态切换Servlet容器
我们在切换serlvet容器的时候,会将SpringBoot默认的tomcat jar包给排除掉,换上我们需要的jar包,比如jetty。
39 0
|
5月前
|
Java Docker 容器
springboot项目容器化
springboot项目容器化
下一篇
无影云桌面