docker导出日志到本地的方法是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~