热门标签 | 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 DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
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社区 版权所有