ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

K8S-实战案例之基于jenkins与gitlab实现容器代码升级及回滚

2022-05-02 15:31:06  阅读:208  来源: 互联网

标签:回滚 K8S tomcat gitlab echo && 镜像 jenkins k8s


大致过程:jenkins去Gitlab拉取镜像,编译打包,扫描,上传到服务器制作镜像后上传至harbor,在master 使用set images升级镜像版本。

1. 在gitlab创建项目myapp,用于后续代码升级,当开发将代码上传到gitlab,运维使用jenkins升级镜像或回滚

2. 在jenkins创建job,执行代码升级脚本,k8s-linux39-myapp

3. 在jenkins创建脚本

 4. jenkins 创建参数化构建过程,参数一指定了是deploy和rollback,参数二指定是对哪个分支(master/develop)的代码进行部署

#!/bin/bash

# 记录脚本开始时间,后期可以统计构建时长
starttime=`date +'%Y-%m-%d-%H:%M:%S'`

# 变量
SHELL_DIR="/usr/bin/bash"
SHELL_NAME="$0"   # bash
K8S_CONTROLLRE1="192.168.64.113"  # 生产环境
K8S_CONTROLLRE2="192.168.64.114"  # 测试环境
DATE=`date +%Y-%m-%d-%H:%M:%S`    # 以时间戳记录镜像版本号
METHOD="$1"   # 部署还是回滚
Branch="$2"   # 哪个分支进行部署

# 设置默认参数,默认部署develop
# 判断Branch字符是否为空 if test -z $Branch;then Branch=develop fi # 代码clone、编译 function code_Clone(){ git_url="git@192.168.64.200:web-test/app1.git" dri_name=`echo ${git_url} |awf -F "/" '{print $2}' | awf -F "." '{print $1}'` data_dir="/data/gitdata/web-test" git_dir="${data_dir}/${dri_name}" cd ${data_dir} && echo "即将清空上一个版本代码并获取当前分支最新代码" && sleep 1 && rm -rf ${dri_name} echo "即将开始从分支${Branch}克隆代码" && sleep 1 git clone -b ${Branch} ${git_url} echo "代码${Branch}克隆完成,即将进行代码编译" && sleep 1 # cd ${git_dir} && mvn clean package # echo "代码${Branch}编译完成,即将对IP地址等信息替换为测试环境" && sleep 1 cd ${git_dir} tar -czf ${dri_name}.tar.gz ./* } # 将打包好的压缩文件拷贝到k8s控制端服务器 function copy_file(){ echo "压缩文件打包完成,即将拷贝到端服务器${K8S_CONTROLLRE1}" && sleep 1 scp ${git_dir}/${dri_name}.tar.gz root@${K8S_CONTROLLRE1}:/opt/k8s-data/dockerfile/linux39/tomcat-app1/ echo "压缩文件拷贝完成,服务器${K8S_CONTROLLRE1}即将开始制作docker 镜像!" && sleep 1 } # 在控制端执行脚本制作并上传镜像 function makeimage(){ echo "开始制作Dockerfile镜像并上传到harbor服务器" && sleep 1 ssh root@${K8S_CONTROLLRE1} "cd /opt/k8s-data/dockerfile/linux39/tomcat-app1/ && bash build-commad.sh ${DATE}" # ${DATE}为版本tag号 echo "镜像制作完成并已上传到harbor服务器" } # 更新yml文件,保证yml文件中镜像版本号和image的版本一致 function update_k8s_yml(){ echo "即将更新k8s yml文件镜像版本" && sleep 1 ssh root@${K8S_CONTROLLRE1} "cd /opt/k8s-data/dockerfile/linux39/tomcat-app1/ && sed -i s/image: linux-harbor-tomcat-*/image: linux-harbor-tomcat-net:${DATE}/g" tomcat-app1.yaml echo "k8s yml 文件镜像更新完成,即将开始更新容器中镜像版本" } # 更新镜像版本,1. 使用set image 2. apply function update_k8s_container(){ # 第一种 ssh root@${K8S_CONTROLLRE1} "kubectl set image deployment/web-test-tomcat-deployment web-test-tomcat-spec=xxx:{DATE} -n web-test" # 第二种 # ssh root@${K8S_CONTROLLRE1} "cd /opt/k8s-data/dockerfile/linux39/tomcat-app1/ && kubectl apply -f tomcat-app1.yaml" } # 回滚 function rollback_laster_version(){ echo "即将回滚到上一个版本" ssh root@${K8S_CONTROLLRE1} "kubectl rollout undo deployment/web-test-tomcat-deployment -n web-test" sleep 1 echo "已经回滚到上一个版本" } # 使用帮助 usage(){ echo "部署使用方法为 ${SHELL_DIR}${SHELL_NAME}" echo "回滚到上一个版本的使用方法为${SHELL_DIR}${SHELL_NAME} rollback_last_version" } # 主函数 main(){ cace ${METHOD} in deploy) code_Clone; copy_file; makeimage; update_k8s_yml; update_k8s_container; ;; rollback_last_version) rollback_laster_version; ;; --help) usage; esac; } main $1 $2 $3

 

标签:回滚,K8S,tomcat,gitlab,echo,&&,镜像,jenkins,k8s
来源: https://www.cnblogs.com/rtnb/p/16215899.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有