热门标签 | 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 Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 最新计算机专业原创毕业设计参考选题都有源码+数据库是近期作品ling取参考你的选题刚好在下面有,有时间看到机会给您发1ssm资源循环利用2springboot校园考勤系统3ssm防 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
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社区 版权所有