热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho

1. 脚本功能

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

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

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


2. 脚本准备

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

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


shell自动化脚本放置自动化部署脚本,执行脚本即可一键部署或者更新java服务或者前端服务。
DockerBuilder构建工厂放置服务名对应的各个服务文件夹,服务文件夹下放置application.properties、bootstrap.properties。打包后端Jar会自动替换这些配置文件
Jar

微服务更新包

放置所有微服务包
Front前端更新包放置所有前端包

3. 环境变量配置

vi /etc/profile

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

export DockerBuilder=/home/springcloud/DockerBuilder
export Jar=/home/springcloud/Jar
export FrOnt=/home/springcloud/Front
export NginxHtml=/usr/springcloud/nginx/htmlalias shell="cd /home/springcloud/shell"

 刷新环境变量使其生效

source /etc/profile

 配置全局java环境

1.查看已经安装的JDKyum list installed |grep java2.卸载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 -version5.执行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" ]; thenecho "备份文件夹不存在,自动创建中";mkdir $Jar/backup;
fi
if [ -f "$dockersrc/$bmc" ];thenecho "旧版本存在,自动备份中"mv $dockersrc/$bmc $Jar/backup/$bmc.$version
fi
echo '第二步:替换JAR包配置文件'
#找到替换文件路径
if [ ! -f "$Jar/$bmc" ];thenecho "$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 ]; thenecho "java命令不存在,请安装JDK"exit 1;
fi
if [ -f "$dockersrc/$file1" ]; thenecho '替换bootstrap配置文件'jar -xvf $bmc $filesrc1#删掉原文件sudo rm -f $filesrc1#换掉文件cp $file1 $filesrc1#重新将文件加入到jar包中jar -uvf $bmc $filesrc1
fi
if [ -f "$dockersrc/$file2" ]; thenecho '替换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 ];
thenecho "不存在容器,需要初始化容器";docker build -t zhhq-$appname .if [ $? != 0 ]; thenecho "docker构建失败,请检查Docker" && exit 1fiif [[ "$appname" == "manager" ]]; thenecho "发布管理端后台"docker run -d --network host --name zhhq-$appname -p 7001:7001 --restart always zhhq-$appnameelif [[ "$appname" == "user" ]];thenecho "发布用户端后台"docker run -d --network host --name zhhq-$appname -p 7011:7011 --restart always zhhq-$appnameelseecho "发布$appname服务"docker run -d --name zhhq-$appname --restart always zhhq-$appnamefiif [ $? -eq 0 ];thenecho "$appname发布成功!" && exit 0elseecho -e '\033[31m[ error ]$appname 发布失败 \033[0m' && exit 1fiif [ $? -eq 0 ];thenecho "$appname发布成功!"elseecho -e '\033[31m[ error ]$appname 发布失败 \033[0m' && exit 1fi
elseecho "已经存在容器,需要更新容器";cOnid=$(docker ps |grep $appname |awk '{print $1}')docker cp $Jar/$appname-server-web-1.0.jar $conid:/$appname-server-web-1.0.jardocker restart $conidif [ $? -eq 0 ]; thenecho "发布成功!"else echo -e '\033[31m[ error ] 发布失败 \033[0m' && exit 1fi
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" ]; thenecho "备份文件夹不存在,自动创建中";mkdir $Front/backup;
fi
if [ ! -d "$Front/$bmc" ];thenecho '更新包不存在请检查' && exit 1
elseecho "准备更新$appname"
fi
if [ -f "$NginxHtml/$bmc" ];thenecho "旧版本存在,自动备份中"mv $NginxHtml/$bmc $Front/backup/$bmc.$version
fi
mv $Front/$bmc $NginxHtml/
echo "发布成功!"


推荐阅读
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • springMVC JRS303验证 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
author-avatar
oth0037112
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有