测试代码是否可以克隆
root@wang:~/3# git clone git@192.168.200.147:linux37/app.git
创建放置脚本的文件夹
root@jenkins:~# mkdir /root/scripts
创建打包目录
root@jenkins:~/scripts# mkdir /data/gitdata/linux37/app -pv
创建代码克隆脚本
root@jenkins:~/scripts# cat linux37-k8s-tomcat-app1.sh
#!/bin/bash
#Author:wyh
#Date: 2019-08-03
#Version: v1
#记录脚本开始执行时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`
#变量
SHELL_DIR="/root/scripts"
SHELL_NAME="$0"
K8S_CONTROLLER1="192.168.200.198"
K8S_CONTROLLER2="192.168.200.197"
DATE=`date +%Y-%m-%d_%H_%M_%S`
METHOD=$1
Branch=$2
if test -z $Branch;then
Branch=develop
fi
function Code_Clone(){
Git_URL="git@192.168.200.147:linux37/app.git"
DIR_NAME=`echo ${Git_URL} |awk -F "/" '{print $2}' | awk -F "." '{print $1}'`
DATA_DIR="/data/gitdata/linux37"
Git_Dir="${DATA_DIR}/${DIR_NAME}"
cd ${DATA_DIR} && echo "即将清空上一版本代码并获取当前分支最新代码" && sleep 1 && rm -rf ${DIR_NAME}
echo "即将开始从分支${Branch} 获取代码" && sleep 1
git clone -b ${Branch} ${Git_URL}
echo "分支${Branch} 克隆完成,即将进行代码编译!" && sleep 1
#cd ${Git_Dir} && mvn clean package
#echo "代码编译完成,即将开始将IP地址等信息替换为测试环境"
#####################################################
sleep 1 && echo "代码编译完成,即将开始打包"
cd ${Git_Dir}
tar czf ${DIR_NAME}.tar.gz ./*
}
#将打包好的压缩文件拷贝到k8s 控制端服务器
function Copy_File(){
echo "压缩文件打包完成,即将拷贝到k8s 控制端服务器${K8S_CONTROLLER1}" && sleep 1
scp ${Git_Dir}/${DIR_NAME}.tar.gz root@${K8S_CONTROLLER1}:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1
echo "压缩文件拷贝完成,服务器${K8S_CONTROLLER1}即将开始制作Docker 镜像!" && sleep 1
}
#到控制端执行脚本制作并上传镜像
function Make_Image(){
echo "开始制作Docker镜像并上传到Harbor服务器" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/dockerfile/web/linux37/tomcat-app1 && bash build-command.sh ${DATE}"
echo "Docker镜像制作完成并已经上传到harbor服务器" && sleep 1
}
#到控制端更新k8s yaml文件中的镜像版本号,从而保持yaml文件中的镜像版本号和k8s中版本号一致
function Update_k8s_yaml(){
echo "即将更新k8s yaml文件中镜像版本" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/web/linux37/tomcat-app1 && sed -i 's/image: harbor.magedu.*/image: harbor.magedu.net\/linux37\/linux37-tomcat:${DATE}/g' tomcat-app1.yaml"
echo "k8s yaml文件镜像版本更新完成,即将开始更新容器中镜像版本" && sleep 1
}
#到控制端更新k8s中容器的版本号,有两种更新办法,一是指定镜像版本更新,二是apply执行修改过的yaml文件
function Update_k8s_container(){
#第一种方法
ssh root@${K8S_CONTROLLER1} "kubectl set image deployment/linux37-tomcat-app1-deployment linux37-tomcat-app1-container=harbor.magedu.net/linux37/linux37-tomcat:${DATE} -n linux37"
#第二种方法,推荐使用第一种
#ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/web-test/tomcat-app1 && kubectl apply -f web-test.yam --record"
echo "k8s 镜像更新完成" && sleep 1
echo "当前业务镜像版本: harbor.magedu.net/linux37/linux37-tomcat:${DATE}"
#计算脚本累计执行时间,如果不需要的话可以去掉下面四行
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次业务镜像更新总计耗时:"$((end_seconds-start_seconds))"s"
}
#基于k8s 内置版本管理回滚到上一个版本
function rollback_last_version(){
echo "即将回滚之上一个版本"
ssh root@${K8S_CONTROLLER1} "kubectl rollout undo deployment/linux37-tomcat-app1-deployment -n linux37"
sleep 1
echo "已执行回滚至上一个版本"
}
#使用帮助
usage(){
echo "部署使用方法为 ${SHELL_DIR}/${SHELL_NAME} deploy branch"
echo "回滚到上一版本使用方法为 ${SHELL_DIR}/${SHELL_NAME} rollback_last_version"
}
#主函数
main(){
case ${METHOD} in
deploy)
Code_Clone;
# Copy_File;
# Make_Image;
# Update_k8s_yaml;
# Update_k8s_container;
;;
rollback_last_version)
rollback_last_version;
;;
*)
usage;
esac;
}
main $1 $2 $3
执行打包脚本
root@jenkins:~/scripts# bash linux37-k8s-tomcat-app1.sh deploy master
即将清空上一版本代码并获取当前分支最新代码
即将开始从分支master 获取代码
Cloning into 'app'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
分支master 克隆完成,即将进行代码编译!
代码编译完成,即将开始打包
查看打包目录
root@jenkins:/data/gitdata/linux37/app# ls
app.tar.gz index.html
root@jenkins:/data/gitdata/linux37/app# cp app.tar.gz /opt/
拷贝过去
root@master:/opt# scp -r k8s-data 192.168.200.197:/opt/
拷贝密钥过去
root@jenkins:~/scripts# ssh-copy-id 192.168.200.198
把拷贝代码的添加过去,打包镜像也添加上
root@jenkins:~/scripts# vim linux37-k8s-tomcat-app1.sh
95 Copy_File;
96 Make_Image;
97 Update_k8s_yaml;
98 Update_k8s_container;
修改build文件,加上tag标签
root@master:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1# vim build-command.sh
#/bin/bash
TAG=$1
docker build -t harbor.wyh.net/linux37/linux37-tomcat:${TAG} .
docker push harbor.wyh.net/linux37/linux37-tomcat:${TAG}
修改Dockerfile 解压路径
root@master:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1# vim Dockerfile
ADD app.tar.gz /data/tomcat/webapps/app
执行镜像脚本
root@jenkins:~/scripts# bash linux37-k8s-tomcat-app1.sh deploy master
即将清空上一版本代码并获取当前分支最新代码
即将开始从分支master 获取代码
Cloning into 'app'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
分支master 克隆完成,即将进行代码编译!
代码编译完成,即将开始打包
压缩文件打包完成,即将拷贝到k8s 控制端服务器192.168.200.198
app.tar.gz 100% 139 193.2KB/s 00:00
压缩文件拷贝完成,服务器192.168.200.198即将开始制作Docker 镜像!
开始制作Docker镜像并上传到Harbor服务器
Sending build context to Docker daemon 39.94kB
Step 1/9 : FROM harbor.wyh.net/linux37/linux37-centos7.6-tomcat:8.5.45
---> 2bc25989d3eb
Step 2/9 : maintainer zhangshijie "50589143@qq.com"
---> Running in 338f123645a9
Removing intermediate container 338f123645a9
---> cd52e0f15ef2
Step 3/9 : ADD app.tar.gz /data/tomcat/webapps/app
---> 41ebc73587b0
Step 4/9 : ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
---> 37452f5430b7
Step 5/9 : ADD server.xml /apps/tomcat/conf/server.xml
---> 9fa537c0e1ca
Step 6/9 : ADD catalina.sh /apps/tomcat/bin/catalina.sh
---> fc6bfedf1640
Step 7/9 : RUN chown www.www /apps/tomcat /data/tomcat /apps/apache-tomcat-8.5.45 -R
---> Running in ed1f3c01ddc3
Removing intermediate container ed1f3c01ddc3
---> 7e4194983f2b
Step 8/9 : EXPOSE 8080 8443
---> Running in 8d7350f4410c
Removing intermediate container 8d7350f4410c
---> 008fa5c88de5
Step 9/9 : CMD ["/apps/tomcat/bin/run_tomcat.sh"]
---> Running in 50c57445c8d0
Removing intermediate container 50c57445c8d0
---> 8a8f5c56e00a
Successfully built 8a8f5c56e00a
Successfully tagged harbor.wyh.net/linux37/linux37-tomcat:2019-12-01_09_10_49
The push refers to repository [harbor.wyh.net/linux37/linux37-tomcat]
Get https://harbor.wyh.net/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Docker镜像制作完成并已经上传到harbor服务器
查看镜像
root@master:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harbor.wyh.net/linux37/linux37-tomcat 2019-12-01_09_10_49 8a8f5c56e00a 2 minutes ago 977MB
启动容器
root@master:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1# docker run -it --rm -p 8081:8080 harbor.wyh.net/linux37/linux37-tomcat:2019-12-01_09_10_49
查看宿主机的8081端口
修改脚本主要是镜像地址
root@jenkins:~/scripts# cat linux37-k8s-tomcat-app1.sh
#!/bin/bash
#Author: ZhangShiJie
#Date: 2019-08-03
#Version: v1
#记录脚本开始执行时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`
#变量
SHELL_DIR="/root/scripts"
SHELL_NAME="$0"
K8S_CONTROLLER1="192.168.200.198"
K8S_CONTROLLER2="192.168.200.197"
DATE=`date +%Y-%m-%d_%H_%M_%S`
METHOD=$1
Branch=$2
if test -z $Branch;then
Branch=develop
fi
function Code_Clone(){
Git_URL="git@192.168.200.147:linux37/app.git"
DIR_NAME=`echo ${Git_URL} |awk -F "/" '{print $2}' | awk -F "." '{print $1}'`
DATA_DIR="/data/gitdata/linux37"
Git_Dir="${DATA_DIR}/${DIR_NAME}"
cd ${DATA_DIR} && echo "即将清空上一版本代码并获取当前分支最新代码" && sleep 1 && rm -rf ${DIR_NAME}
echo "即将开始从分支${Branch} 获取代码" && sleep 1
git clone -b ${Branch} ${Git_URL}
echo "分支${Branch} 克隆完成,即将进行代码编译!" && sleep 1
#cd ${Git_Dir} && mvn clean package
#echo "代码编译完成,即将开始将IP地址等信息替换为测试环境"
#####################################################
sleep 1 && echo "代码编译完成,即将开始打包"
cd ${Git_Dir}
tar czf ${DIR_NAME}.tar.gz ./*
}
#将打包好的压缩文件拷贝到k8s 控制端服务器
function Copy_File(){
echo "压缩文件打包完成,即将拷贝到k8s 控制端服务器${K8S_CONTROLLER1}" && sleep 1
scp ${Git_Dir}/${DIR_NAME}.tar.gz root@${K8S_CONTROLLER1}:/opt/k8s-data/dockerfile/web/linux37/tomcat-app1
echo "压缩文件拷贝完成,服务器${K8S_CONTROLLER1}即将开始制作Docker 镜像!" && sleep 1
}
#到控制端执行脚本制作并上传镜像
function Make_Image(){
echo "开始制作Docker镜像并上传到Harbor服务器" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/dockerfile/web/linux37/tomcat-app1 && bash build-command.sh ${DATE}"
echo "Docker镜像制作完成并已经上传到harbor服务器" && sleep 1
}
#到控制端更新k8s yaml文件中的镜像版本号,从而保持yaml文件中的镜像版本号和k8s中版本号一致
function Update_k8s_yaml(){
echo "即将更新k8s yaml文件中镜像版本" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/web/linux37/tomcat-app1 && sed -i 's/image: harbor.wyh.*/image: harbor.wyh.net\/linux37\/linux37-tomcat:${DATE}/g' tomcat-app1.yaml"
echo "k8s yaml文件镜像版本更新完成,即将开始更新容器中镜像版本" && sleep 1
}
#到控制端更新k8s中容器的版本号,有两种更新办法,一是指定镜像版本更新,二是apply执行修改过的yaml文件
function Update_k8s_container(){
#第一种方法
ssh root@${K8S_CONTROLLER1} "kubectl set image deployment/linux37-tomcat-app1-deployment linux37-tomcat-app1-container=harbor.wyh.net/linux37/linux37-tomcat:${DATE} -n linux37"
#第二种方法,推荐使用第一种
#ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/web-test/tomcat-app1 && kubectl apply -f web-test.yam --record"
echo "k8s 镜像更新完成" && sleep 1
echo "当前业务镜像版本: harbor.wyh.net/linux37/linux37-tomcat:${DATE}"
#计算脚本累计执行时间,如果不需要的话可以去掉下面四行
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次业务镜像更新总计耗时:"$((end_seconds-start_seconds))"s"
}
#基于k8s 内置版本管理回滚到上一个版本
function rollback_last_version(){
echo "即将回滚之上一个版本"
ssh root@${K8S_CONTROLLER1} "kubectl rollout undo deployment/linux37-tomcat-app1-deployment -n linux37"
sleep 1
echo "已执行回滚至上一个版本"
}
#使用帮助
usage(){
echo "部署使用方法为 ${SHELL_DIR}/${SHELL_NAME} deploy branch"
echo "回滚到上一版本使用方法为 ${SHELL_DIR}/${SHELL_NAME} rollback_last_version"
}
#主函数
main(){
case ${METHOD} in
deploy)
Code_Clone;
Copy_File;
Make_Image;
Update_k8s_yaml;
Update_k8s_container;
;;
rollback_last_version)
rollback_last_version;
;;
*)
usage;
esac;
}
main $1 $2 $3
root@jenkins:~/scripts# bash linux37-k8s-tomcat-app1.sh deploy master
访问30002的端口,页面也更新
把nginx修改成v3
root@master:/opt/k8s-data/yaml/web/linux37/nginx# vim nginx.yaml
9 replicas: 1
改为1个
20 image: harbor.wyh.net/linux37/nginx:v3
执行
root@master:/opt/k8s-data/yaml/web/linux37/nginx# kubectl apply -f nginx.yaml
查看nginx页面轮训不同
image.png
克隆
root@jenkins:/3# git clone git@192.168.200.147:linux37/app.git
修改代码为v2
root@jenkins:/3/app# vim index.html
linux37 app1 k8s v2
root@jenkins:/3/app# mkdir wyh
root@jenkins:/3/app# vim wyh/index.html
wyh
添加到本地仓库
root@jenkins:/3/app# git add ./*
提交到gitlab上
root@jenkins:/3/app# git commit -m "v2"
创建一个自由风格到项目
image.png 传递的参数
执行master
image.png
image.png 回滚代码 image.png image.png
网友评论