k8s自動化部署springcloud、springboot指令碼

逸虛凌辰發表於2020-12-01

       為了自動化部署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
#清除上一次的殘餘
rm -f *.tar *.jar
cp /home/springcloud/jar/$bmc $dockersrc
filesrc1=`jar -tvf \$bmc|grep \$file1|awk '{print \$NF}'`
echo $bmc
echo $file1
echo $filesrc1
#把要替換的檔案解壓出來
jar -xvf $bmc $filesrc1
#刪掉原檔案
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 .
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
echo '第三步:升級K8s容器'
#替換k8s容器映象版本
cd $k8ssrc
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指令碼

這個篇幅較長,放到下一篇吧 

 

相關文章