Jenkins(Pipeline) kubernetes(k8s)滚动发布实战

前言

开始前的准备

第一次创建应用

操作Jenkins

General

  • 这块填下描述就可以了。

在这里插入图片描述

流水线

  • 重点是这里Pipeline script

在这里插入图片描述

  • Pipeline script内容如下(因为我是公共仓库,不需要认证,克隆仓库步骤不必使用credentialsId)。
pipeline {
    agent any
    tools {
        maven 'maven3.6' 
    }
    stages {
        stage('开始') {
            steps {
                echo '开始 '
            }
        }
        
     stage('克隆项目') {
        steps {
        git branch: 'main',
        url: 'https://github.com/1030907690/spring-boot-kubernetes.git'
        sh 'pwd'
        sh "ls -lat"
        }
     }
        
       stage('构建') {
          steps {
            sh 'mvn clean package -DskipTests'
            sh 'echo tag  ${BUILD_TAG}'
            sh 'cp src/main/resources/Dockerfile target'
            sh 'cd target && docker build -t spring-boot-kubernetes:${BUILD_TAG} .'
        
      
          }
        }
        
        stage('滚动更新') {
          steps {
            sh 'kubectl set image  deployment/spring-boot-kubernetes-deployment  spring-boot-kubernetes=spring-boot-kubernetes:${BUILD_TAG} --record'
            sh 'kubectl get pod -o wide'
            sh 'kubectl rollout status deployment/spring-boot-kubernetes-deployment'
            sh 'kubectl get pod -o wide'
      
          }
        }
        
    }
    post {
        success {
            echo '更新成功'
                   
        }

        always {
            echo 'goodbye'
        }
    }
}

Jenkins构建

  • 下面就可以使用Build Now一键发布最新的应用。
    在这里插入图片描述
  • 可以查看构建历史,如果有错误的时候,方便排查错误。
    在这里插入图片描述
    在这里插入图片描述
  • 如果你不想点Build Now,也可以使用Webhook,可以参考拙作gitlab+jenkins自动发布到Tomcat

扩展

  • 流水线定义,支持多种,还可以使用Pipeline script from SCM,如下图所示。
    在这里插入图片描述

  • 我们可以把Jenkinsfile写在项目中,一并提交到远程仓库,如下图所示。
    在这里插入图片描述

  • Jenkins的配置修改后如下所示。
    在这里插入图片描述

  • 还有因为已经指定了仓库,Jenkinsfile中克隆项目的步骤可以注释了。

  //stage('克隆项目') {
  //   steps {
  //   git branch: 'main',
  //   url: 'https://github.com/1030907690/spring-boot-kubernetes.git'
  //       sh 'pwd'
  //       sh "ls -lat"
  //     }
  //   }

小结

  • 自由风格能应对绝大部分场景,Pipeline感觉可视化体验更好,以代码的形式实现,更容易细粒度控制,适用于复杂的场景,同时学习成本高一点。

posted on 2022-08-28 11:26  愤怒的苹果ext  阅读(234)  评论(0编辑  收藏  举报

导航