一、发布金丝雀版本

Pre Setps

cd /var/lib/jenkins/workspace/istio-service-user-canary/istio-service-user

# 旧版本号验证

if [ "$oldVersion" == "" ];then
echo "旧版本号不能为空"
return
fi
/usr/local/bin/kubectl get virtualservice istio-service-user -o yaml > k8s/vsold.yaml
vsold=$(cat k8s/vsold.yaml)
if [[ $vsold =~ $oldVersion ]];then
echo "旧版本包含"
else
echo "旧版本不包含"
return
fi

maven

-pl istio-service-user -am clean package

Post Steps

cd /var/lib/jenkins/workspace/istio-service-user-canary/istio-service-user

# 使用GitTag作为版本打docker镜像并上传至镜像仓库
docker build -t istio-service-user:${gittag} .
docker tag istio-service-user:${gittag} swr.ap-southeast-.myhuaweicloud.com/mk-develop/istio-service-user:${gittag}
docker push swr.ap-southeast-.myhuaweicloud.com/mk-develop/istio-service-user:${gittag} # 使用GitTag作为版本部署实例
sed -i "s/gittag/${gittag}/g" k8s/istio-service-user-deployment.yaml
mv -f k8s/istio-service-user-deployment.yaml k8s/istio-service-user-deployment-${gittag}.yaml
/usr/local/bin/kubectl apply -f k8s/istio-service-user-deployment-${gittag}.yaml # 目标规则加入新GitTag版本
/usr/local/bin/kubectl get destinationrules istio-service-user -o yaml > k8s/istio-service-user-destinationrule.yaml
destrule=$(cat k8s/istio-service-user-destinationrule.yaml)
if [[ $destrule =~ $gittag ]];then
echo "目标规则包含"
else
sed -i "\$a\ - name: ${gittag}" k8s/istio-service-user-destinationrule.yaml
sed -i "\$a\ labels:" k8s/istio-service-user-destinationrule.yaml
sed -i "\$a\ version: ${gittag}" k8s/istio-service-user-destinationrule.yaml
fi
/usr/local/bin/kubectl apply -f k8s/istio-service-user-destinationrule.yaml # 服务路由加入新版本金丝雀
sed -i "s/jsqVersion/${gittag}/g" k8s/istio-service-user-virtualservice-jsq.yaml
sed -i "s/currentVersion/${oldVersion}/g" k8s/istio-service-user-virtualservice-jsq.yaml
/usr/local/bin/kubectl apply -f k8s/istio-service-user-virtualservice-jsq.yaml

二、切换为生产版本(上线)

Pre Steps

cd /var/lib/jenkins/workspace/istio-service-user-canary/istio-service-user

# 生产版本号验证
if [ "$proVersion" == "" ];then
echo "生产版本号不能为空"
return
fi
/usr/local/bin/kubectl get virtualservice istio-service-user -o yaml > k8s/vspro.yaml
vspro=$(cat k8s/vspro.yaml)
if [[ $vspro =~ $proVersion ]];then
echo "生产版本存在"
else
echo "生产版本不存在"
return
fi #替换生产版本号
sed -i "s/proVersion/${proVersion}/g" k8s/istio-service-user-virtualservice-pro.yaml
mv -f k8s/istio-service-user-virtualservice-pro.yaml k8s/istio-service-user-virtualservice-${proVersion}.yaml
/usr/local/bin/kubectl apply -f k8s/istio-service-user-virtualservice-${proVersion}.yaml
rm -rf k8s/istio-service-user-virtualservice-${oldVersion}.yaml if [ "$oldVersion" == "" ];then
echo "未下线旧版本"
else
/usr/local/bin/kubectl delete -f k8s/istio-service-user-deployment-${oldVersion}.yaml
rm -rf k8s/istio-service-user-deployment-${oldVersion}.yaml
fi

三、下线已上线金丝雀(回滚)

Pre Steps

cd /var/lib/jenkins/workspace/istio-service-user-canary/istio-service-user

# 金丝雀版本号验证
if [ "$jsqVersion" == "" ];then
echo "金丝雀版本号不能为空"
return
fi
/usr/local/bin/kubectl get virtualservice istio-service-user -o yaml > k8s/vspro.yaml
vspro=$(cat k8s/vspro.yaml)
if [[ $vspro =~ $proVersion ]];then
echo "金丝雀版本号存在"
else
echo "金丝雀版本号不存在"
return
fi #替换生产版本号
/usr/local/bin/kubectl apply -f k8s/istio-service-user-virtualservice-${rollbackVersion}.yaml #删除金丝雀版本发布
/usr/local/bin/kubectl delete -f k8s/istio-service-user-deployment-${jsqVersion}.yaml
rm -rf k8s/istio-service-user-deployment-${jsqVersion}.yaml

jenkins传统模式发布istio应用的更多相关文章

  1. 采用 EventHandler 模式发布事件(转载)

    采用 EventHandler 模式发布事件 (如果不需要与事件一起发送自定义数据,请跳过此步骤,进入步骤 3a.)在发行者类和订阅方类均可看见的范围中声明自定义数据的类. 然后添加保留您的自定义事件 ...

  2. 传统模式下WebService与WebAPI的相同与不同

    1.WebService是利用HTTP管道实现了RPC的一种规范形式,放弃了对HTTP原生特征与语义的完备支持:而WebAPI是要保留HTTP原生特征与语义的同时实现RPC,但WebAPI的实现风格可 ...

  3. Jenkins 2.26 发布,可扩展的持续集成引擎

    Jenkins 2.26 发布了.Jenkins 主要用于持续.自动地构建/测试软件项目,如CruiseControl与DamageControl,监控一些定时执行的任务.更新内容: Allow Co ...

  4. 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

    mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到. 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用. 以前很多文章,介绍搭建mysql主从复制架构,是 ...

  5. Jenkins指定tag发布到k8s环境

    Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...

  6. RabbitMQ六种队列模式-发布订阅模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...

  7. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_8.RabbitMQ研究-工作模式-发布订阅模式-生产者

    Publish/subscribe:发布订阅模式 发布订阅模式: 1.每个消费者监听自己的队列. 2.生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将 ...

  8. Jenkins+Harbor+Docker发布

    使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...

  9. Jenkins+tomcat自动发布的热部署/重启及遇到的坑解决办法

    一.背景 公司的项目一直手动maven打包.上传服务器.关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动 ...

随机推荐

  1. mongodb主备配置

    前言:mongodb目前推荐的方式是副本集的方式实现,但是副本集需要三台服务器,目前配置为主备方式 假设你已经安装好了mongo,并配置好了响应的用户 下面修改mongodb.conf配置文件,开启认 ...

  2. QGIS练手 - 标注

    又熬夜了... QGIS的标注就是标签,在QGIS3.x中有了改进. 不得不说,就光速度这一项,就能把ArcMap按在地上摩擦,更别说各种高级的标注样式了——除了标注功能面板UI有点“缺审美化”就是了 ...

  3. LeetCode刷题191122

    博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 算法: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. ...

  4. PWA 学习笔记(一)

    PWA 介绍 概念: PWA(Progressive web apps,渐进式 Web 应用)运用现代 Web API 和传统的渐进式增强策略来创建跨平台 Web 应用程序 它并不是一个快捷方式,而能 ...

  5. MySQL数据库:运算符

    运算符 比较运算符: > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 != 不等于 范围运算符: between...and...(包含边界值) 类似于 > ...

  6. javascript随机数发现的一个parseInt函数的问题

    前几天想伪造一些数据,用到了随机数,没有自己写,便在网上找了一下,找到了这篇文章:https://www.cnblogs.com/starof/p/4988516.html .之后测试了一下,发现了一 ...

  7. debug查找主板生产日期

    实验环境:XP(XP以上系统没有自带debug) 查询主板生产日期,发现时间为07/02/15 -e命令进行修改日期,尝试将07年改为08年 在查询一下修改完成后的日期,发现日期不变 原因:这块内存是 ...

  8. hibernate opensission.createSQLquery 问题

    在进行分页查询的时候,通常会用到,页码,每页容量等等的参数进行操作,如下图: query.list()的时候会执行得到所需要的集合的值,在这个过程中, 如果使用自定义的返回参数,比如将日期做一些基本处 ...

  9. Java之字符编码和字符集

    什么是字符编码 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果.按照某种规则,将字符存储到计算机中,称为编码 .反之,将存储在计算 ...

  10. Python中容易忽视的知识点

    今天坐在实验室,觉得有点无聊,想了下,很久没写博客了,就来写一点,正好遇到了一个有意思的小问题,分享给大家. 首先我们通过一个小的实验来看一下内容: 不管是 Python2 还是 Python3 环境 ...