zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    gitlab: git clone/pull / push: The project you were looking for could not be found
    转载: MySQL启动出错InnoDB: Check that you do not already have another mysqld process解决方法
    root用户删除文件,提示:Operation not permitted
    使用dockerfile打包新镜像
    kubernets创建Deployment
    代理全家福
    Spring事务传播详解
    [FFmpeg]Centos7 yum安装
    [Redis]存放字典
    [Docker]开放2375端口
  • 原文地址:https://www.cnblogs.com/assion/p/11348846.html
Copyright © 2011-2022 走看看