jenkins传统模式发布istio应用

Posted assion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins传统模式发布istio应用相关的知识,希望对你有一定的参考价值。

一、发布金丝雀版本

技术图片

 

Pre Setps

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

# 旧版本号验证

if [ "$oldVersion" == "" ];then
echo "旧版本号不能为空"
return 0
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 0
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-1.myhuaweicloud.com/mk-develop/istio-service-user:$gittag
docker push swr.ap-southeast-1.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 0
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 0
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 0
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 0
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应用的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins报错Caused: java.io.IOException: Cannot run program "sh" (in directory "D:Jenki(

新Jenkins实践-第1章 开篇-为什么要做CI/CD?

Jenkins 凭证管理 - 看这一篇就够了~

Jenkins 配置邮件通知

轻松部署Jenkins+harbor+gitlab实现docker的CICD

Jenkins 学习笔记:我对 Jenkins 的宏观认识