为了自动化部署jar包到k8s容器云上边而写的脚本。
懒惰才是第一生产力,为了避免繁杂的发包操作。复制粘贴的喋喋不休,jar包升版的版本控制而写的脚本。
一、 脚本功能
把jar包放到指定目录,执行shell脚本,脚本先自动根据文件夹的环境把jar包中的配置文件替换掉。这样可以很方便的打生产环境和测试环境的jar包。只需要把jar放上去,配置文件无需关系,自动放到jar包里。然后脚本会自动把jar打成镜像,给镜像打成镜像名称加时间日期的标签,然后把镜像推送到镜像仓库。然后自动替换k8s的yaml脚本停止旧容器,启动新容器。
二、 脚本所需
1. springboot的jar包
2. 构建springboot镜像的Dockerfile
3. k8s启动yaml文件
三、 脚本定义
appname:所打包的name
dockersrc:用来放置Dockerfile文件。把jar包打成docker镜像。
k8ssrc:用来防止k8s的yaml文件,启动pod,停止pod
bmc:jar包的名字
file1:jar包种要替换的配置文件的名字,这个文件放置在dockersrc目录下。如bootstrap.properties
【替换jar包配置文件真的很方便,这样打成的jar包直接放进来就能用,无需关心配置文件,一键shell即可打包更新环境】
四、 脚本流程
1. 获取当前时间的年月日时分秒,生成当前jar包的版本号
2. 把jar包中的配置文件替换为dockersrc中的配置文件。
3. 把jar包打成docker镜像
4. 清除替换配置文件的残余
5. 给镜像打标签带上我们的版本号
6. 把这个镜像推送到远程镜像仓库
7. 替换yaml文件中的版本号
8. 重启pod,更新完成
五、 脚本详情
#!/bin/bash #auth eric #date 2020-11-25 #*********脚本入参#********* appname=base #Docker脚本位置 dockersrc=/home/springcloud/DockerBuilder/$appname #K8s脚本位置 k8ssrc=/home/springcloud/k8s/$appname #需要替换的包名称 bmc=$appname-server-web-1.0.jar #需要替换的文件名称 file1=bootstrap.properties #*********脚本入参#********* #当前镜像版本 source /etc/profile version="`date +%Y%m%d%H%M%S`" echo '当前版本为'$version echo '第一步:替换JAR包配置文件' #找到替换文件路径 cd $dockersrc if [ ! -d "$dockersrc"]; then echo "$dockersrc文件夹不存在"; exit 1; fi if [ ! -f "$jarsrc/$bmc" ];then echo "$jarsrc/$bmc更新包不存在" fi #清除上一次的残余 rm -f *.tar *.jar cp $jarsrc/$bmc $dockersrc filesrc1=`jar -tvf \$bmc|grep \$file1|awk '{print \$NF}'` echo $bmc echo $file1 echo $filesrc1 #把要替换的文件解压出来 jar -xvf $bmc $filesrc1 if [ $? != 0 ]; then echo "java命令不存在,请安装JDK" exit 1; fi #删掉原文件 rm -f $filesrc1 #换掉文件 cp $file1 $filesrc1 #重新将文件加入到jar包中 jar -uvf $bmc $filesrc1 #删除解压文件 rm -rf BOOT-INF rm -f *.tmp echo '替换完成' echo '第二步:构建Docker镜像' docker build -t springcloud-$appname:1.1 . if [ $? != 0 ]; then echo "docker构建失败,请检查Docker" exit 1; fi docker save springcloud-$appname:1.1 -o springcloud-$appname.tar docker load < springcloud-$appname.tar docker tag springcloud-$appname:1.1 192.168.1.6:15000/springcloud/springcloud-$appname:v$version docker push 192.168.1.6:15000/springcloud/springcloud-$appname:v$version if [ $? != 0 ]; then echo "远程仓库推送失败,请检查远程镜像仓库" exit 1; fi echo '第三步:升级K8s容器' #替换k8s容器镜像版本 cd $k8ssrc if [ ! -d "$k8ssrc"]; then echo "$k8ssrc文件夹不存在"; exit 1; fi sed -i "s|springcloud/springcloud-$appname:.*|springcloud/springcloud-$appname:v$version |g" 04.application-deployments.yaml kubectl delete -f 04.application-deployments.yaml kubectl apply -f 04.application-deployments.yaml echo '升级完成,当前版本为:'$version
六、 Dockerfile实例
首先要先安装openjdk
docker pull openjdk
然后注意修改时区保证docker容器内的时间和外部时间同步
FROM openjdk:8 MAINTAINER ERIC-BASE LABEL app="eric-base" version="1.1" by="eric" COPY ./base-server-web-1.0.jar base-server-web-1.0.jar RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone CMD java -Xms256m -Xmx512m -jar base-server-web-1.0.jar
七、 K8s脚本
这个篇幅较长,放到下一篇吧