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

Posted tty之星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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: \'http://139.155.71.51/root/tomcat.git\'
     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/target
REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}
cat >> Dockerfile << EOF
FROM tomcat:7
RUN mkdir /usr/local/tomcat/webapps/ROOT
ADD ./solo.war /usr/local/tomcat/webapps/ROOT
USER root
EOF
docker build -t $REPOSITORY .
      \'\'\'
    }
    stage(\'docker push  \') {
      echo "docker run"
      sh \'\'\'
      REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}
      docker login http://10.4.7.52 -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/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  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: v1
kind: Service
metadata:
  name: tomcat-service
  labels:
    app: tomcat
spec:
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 31305
  selector:
    app: tomcat
  type: NodePort
EOF
kubectl 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指定版本号

 

接下来我们看看镜像

 

 

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

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

 

以上是关于k8s在jenkins构建,如何回滚和升级23的主要内容,如果未能解决你的问题,请参考以下文章

在Linux上升级回滚和卸载SQL Server 2017

ORACLE 回滚和触发

K8s资源对象的基本管理(升级回滚扩容缩容)

Jenkins系列-Jenkins升级迁移和备份

仅在不处于自动提交模式时回滚和提交

openge sql 触发器的回滚和提交效果