k8s在jenkins构建,如何回滚和升级【23】

网友投稿 309 2022-10-24

k8s在jenkins构建,如何回滚和升级【23】

在自动化发布的时候,会遇到升级和回滚,生产一旦出现异常需要回滚到上一个版本

这里使用pipline来实现,但是需要input做判断,才可以

大概思路是

gitlab拉取代码,然后mvn编译,dockerbuild构建镜像,push到harbor仓库,完成之后开始启动yaml,这里会有个判断是升级还是跳过,y表示升级,n表示跳过,在然后有个判断是回滚,y表示回滚上个版本,n表示跳过

接下来看看配置如下

node('haimaxy-jnlp'){        stage('Clone') {        echo "1.Clone Stage"        git credentialsId: '5789c68f-ebf6-45b8-b9e5-5648c1a3eb09', url: '   script {    //获取comment id        env.imageTag = sh (script: 'git rev-parse --short HEAD ${GIT_COMMIT}', returnStdout: true).trim()      }   }

stage('build') {      echo "2.mvn clean"      sh "cd /home/jenkins/agent/workspace/bbs/solo-master && mvn clean -Dmaven.test.skip=true  install -s /home/jenkins/settings/settings.xml"    }    stage('build dockerfile') {      echo "3.build dockerfile"      sh '''cd /home/jenkins/agent/workspace/bbs/solo-master/targetREPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}cat >> Dockerfile << EOFFROM tomcat:7RUN mkdir /usr/local/tomcat/webapps/ROOTADD ./solo.war /usr/local/tomcat/webapps/ROOTUSER rootEOFdocker build -t $REPOSITORY .      '''    }    stage('docker push  ') {      echo "docker run"      sh '''      REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}      docker login -u admin -p Harbor12345      docker push $REPOSITORY      '''    }        stage('kubectl apply'){          echo "kubectl apply"

echo "是否需要需要升级?"     def userInput = input(            id: 'userInput',            message: '是否需要升级?',            parameters: [              [                $class: 'ChoiceParameterDefinition',                choices: "N\nY",                name: '升级?'              ]            ]          )           if (userInput == "Y") {                      sh '''REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}cat >> tomcat.yaml << EOF          apiVersion: apps/v1kind: Deploymentmetadata:  name: tomcat-deployment  labels:    app: tomcatspec:  replicas: 3  selector:    matchLabels:      app: tomcat  minReadySeconds: 5  strategy:    rollingUpdate:    maxSurge: 1    maxUnavailable: 1  template:    metadata:      labels:        app: tomcat    spec:      containers:      - name: tomcat        image: \$REPOSITORY        ports:        - containerPort: 8080---apiVersion: v1kind: Servicemetadata:  name: tomcat-service  labels:    app: tomcatspec:  ports:  - port: 8080    targetPort: 8080    nodePort: 31305  selector:    app: tomcat  type: NodePortEOFkubectl set image deployment/tomcat-deployment tomcat=$REPOSITORY -n kube-ops          '''          }      }stage('rollout') {    echo "是否需要快速回滚?"     def userInput = input(            id: 'userInput',            message: '是否需要快速回滚?',            parameters: [              [                $class: 'ChoiceParameterDefinition',                choices: "N\nY",                name: '回滚?'              ]            ]          )           if (userInput == "Y") {            sh "kubectl rollout undo deployment tomcat-deployment -n kube-ops"          }         }}

接下来我们验证一下,原来镜像是这个,10.4.7.52/cnych/jenkins-demo:34f2191

接下来我们开始升级一下镜像

首先需要给gitlab更新一下配置,保证gitlab的配置变化一下

上传完成,然后gitlab看一下

接下来开始构建镜像自动化流程

完成之后我们看看镜像是否有升级

和原来的对比已经升级了

接下来我们测试回滚

比如这个新镜像有问题,要回退

回退直接构建就行,啥也不用动

kubectl rollout undo deployment tomcat-deployment -n kube-ops这个命令是直接回退上个版本,

如果其他版本要使用version指定版本号

接下来我们看看镜像

说明已经回退完成,这里是滚动更新,每次增加一个新的,删掉一个旧的,不能一下都删除访问出现不能访问

好了演示到这里,有啥问题可以评论反馈沟通

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java毕业设计实战之养老院管理系统的实现
下一篇:串行通信接口标准
相关文章

 发表评论

暂时没有评论,来抢沙发吧~