【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务

一、流水线部署微服务部署流程【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第1张图片

二、微服务发布流程

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第2张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第3张图片【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第4张图片【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第5张图片【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第6张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第7张图片

要注意jenkinsfile大小写,与代码仓库中的jenkinsfile文件名命名一致即可,这里我们放在项目最外层,就可以直接写文件名称
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第8张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第9张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第10张图片

  • jenkinsfile文件内容 该内容就是前面通过图形化部署流水线所导出的文件
pipeline {
  agent {
    node {
      label 'maven'
    }

  }
   parameters {
    string(name: 'PROJECT_VERSION', defaultValue: 'v1.0', description: '')
    string(name: 'PROJECT_NAME', defaultValue: '', description: '')
  }

   environment {
    DOCKER_CREDENTIAL_ID = 'dockerhub-id'
    GITEE_CREDENTIAL_ID = 'gitee-id'
    KUBECONFIG_CREDENTIAL_ID = 'sangomall-kubeconfig'
    REGISTRY = 'docker.io'
    DOCKERHUB_NAMESPACE = 'nextgomsb'
    GITEE_ACCOUNT = 'nextgomsb'
    SONAR_CREDENTIAL_ID = 'sonar-qube'
  }


  stages {
    stage('拉取项目代码') {
      agent none
      steps {
        git(url: 'https://gitee.com/nextgomsb/sangomall.git', credentialsId: 'gitee-id', changelog: true, poll: false)
      }
    }

    stage('代码质量检查及分析') {
      agent none
      steps {
        container('maven') {
          withCredentials([string(credentialsId : 'sonar-qube' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'echo 当前目录 `pwd`'
              sh 'mvn clean install -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
              sh 'mvn sonar:sonar -gs `pwd`/mvn_settings.xml -Dsonar.login=$SONAR_TOKEN'
            }

          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }

    stage('单元测试') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
        }

      }
    }

    stage('构建项目容器镜像及推送') {
      agent none
      steps {
        container('maven') {
          sh 'mvn clean package -Dmaven.test.skip=true -gs `pwd`/mvn_settings.xml'
          sh 'cd $PROJECT_NAME && docker build -f Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER .'
          withCredentials([usernamePassword(credentialsId : 'dockerhub-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER'
            sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:latest'
          }

        }

      }
    }

    stage('创建项目代码及容器镜像的发布版') {
      agent none
      when {
        expression {
          return params.PROJECT_VERSION =~ /v.*/
        }

      }
      steps {
        container('maven') {
          input(message: '''@project-admin
是否允许推送本次项目代码及容器镜像的发布版?''', submitter: 'project-admin')
          withCredentials([usernamePassword(credentialsId : 'gitee-id' ,passwordVariable : 'GITEE_PASSWORD' ,usernameVariable : 'GITEE_USERNAME' ,)]) {
            sh 'git config --global user.email "[email protected]" '
            sh 'git config --global user.name "nextgo" '
            sh 'git tag -a $PROJECT_VERSION -m "$PROJECT_VERSION" '
            sh 'git push http://$GITEE_USERNAME:[email protected]/$GITEE_ACCOUNT/sangomall.git --tags --ipv4'
          }

          sh 'docker tag  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:SNAPSHOT-$BUILD_NUMBER $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION '
          sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$PROJECT_NAME:$PROJECT_VERSION'
        }

      }
    }

    stage('部署微服务项目到K8S集群') {
      agent none
      steps {
        input(message: '''@project-admin
是否允许发布微服务项目到K8S集群?''', submitter: 'project-admin')
        container('maven') {
          withCredentials([kubeconfigContent(credentialsId : 'sangomall-kubeconfig' ,variable : 'KUBECONFIG_CONTENT' ,)]) {
            sh '''mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < $PROJECT_NAME/deploy/deploy.yaml | kubectl apply -f -'''
          }

        }

      }
    }

  }

}

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第11张图片

  • PROJECT_NAME ;PROJECT_VERSION
  • 运行后,显示设置参数,这是前面我们流水线所配置的环境变量参数,主要是用来进行版本标识,以及对具体哪个微服务部署到k8s集群以及镜像的发布,因为我们项目存在多个微服务,所以如此设计,每次运行需要部署哪个服务,那么就把微服务的module名称写入,流水线中会通过该变量找到对应项目微服务路径包,进而做部署k8s服务和发布容器镜像仓库

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第12张图片

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第13张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第14张图片【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第15张图片- 该阶段设置了需要审批,切换admin用户进行通过即可

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第16张图片
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第17张图片

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第18张图片

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第19张图片

三、微服务部署验证

部署完成之后,在Nacos注册中心可以看到相关微服务
【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第20张图片

四、mall-gateway服务暴露

  • 由于项目设计时,还提供了一个后台管理系统,给管理员进行数据的补录等,那么这里就与我们项目是分开部署,所以需要进行网关服务的集群外访问地址暴露,这样管理员才能通过Gateway网关进而找到后台管理系统对应的后端服务
  • 设置集群外访问,通过创建服务 工作负载,选择网关服务,通过openelb分配ip,实现集群外可访问ip ,提供给后台管理系统的前端项目访问,方式如该文章部署:【业务功能127】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-07数据库服务集群外连接-openelb

  • 得到外部ip后,也可以设置域名解析映射,在DNS服务节点进行解析
    【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第21张图片
[root@dnsserver ~]# cat /var/named/msb.com.zone
$TTL 1D
@       IN SOA  msb.com admin.msb.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      ns.msb.com.
ns      A       192.168.10.145
harbor  A       192.168.10.146
reg-test        A       192.168.10.70
kibana          A       192.168.10.70
rabbitmq        A       192.168.10.70
nacos-server    A       192.168.10.70
zipkin-server   A       192.168.10.70
sentinel-server A       192.168.10.70
skywalking-ui   A       192.168.10.70
rocketmq-dashboard      A       192.168.10.70
mall-gateway    A       192.168.10.73
[root@dnsserver ~]# systemctl restart named

【业务功能128】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere部署三高微服务项目-08部署微服务_第22张图片

你可能感兴趣的:(Spring,cloud,分布式,CI/CD,K8s,微服务,spring,cloud,spring,boot,k8s,微服务部署)