k8s KubeSphere流水线部署SpringBoot后端项目 详细教程

流水线部署SpringBoot后端服务

  • 1. 创建流水线项目
  • 2. 首先去流水线项目 创建三个凭证
  • 3. 创建流水线
  • 4. 流水线Jenkinsfile文件
  • 5. 可视化流水线设置说明
      • - 粘贴以上Jenkinsfile文件,点编辑流水线
      • - 拉取
      • - 编译
      • 打包
        • Dockerfile文件内容:
      • - 推送
      • - 部署
        • deploy.yaml文件:
  • 6. 以上就完成啦

1. 创建流水线项目

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第1张图片

2. 首先去流水线项目 创建三个凭证

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第2张图片

  • kubeconfig类型:默认内容为当前用户的 kubeconfig 配置。 选择此类型创建默认有值
  • 用户名密码(my-login):git账号和密码
  • 用户名密码(my-aliyun-docker):阿里云容器镜像仓库账号密码

3. 创建流水线

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第3张图片

4. 流水线Jenkinsfile文件

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('拉取') {
      agent none
      steps {
        git(url: 'https://gitee.com/wy521a/dream-yard-admin.git', credentialsId: 'my-login', changelog: true, poll: false, branch: 'master')
        sh 'ls'
      }
    }

    stage('编译') {
      agent none
      steps {
        container('maven') {
          sh 'ls'
          sh 'mvn clean package -Dmaven.test.skip=true'
          sh 'ls ruoyi-admin/target/'
        }

      }
    }

    stage('打包') {
      agent none
      steps {
        container('maven') {
          sh 'ls ruoyi-admin/target/'
          sh 'docker build -t dream-yard-admin:latest .'
        }

      }
    }

    stage('推送') {
      agent none
      steps {
        container('maven') {
          withCredentials([usernamePassword(credentialsId : 'my-aliyun-docker' ,passwordVariable : 'DOCKER_USER' ,usernameVariable : 'DOCKER_PASSWORD' ,)]) {
            sh 'echo 镜像库密码 | docker login  镜像库地址 -u 镜像库账号 -p 镜像库密码'
            sh 'docker tag dream-yard-admin:latest 镜像库地址/dream-yard/dream-yard-admin:$BUILD_NUMBER'
            sh 'docker push  镜像库地址/dream-yard/dream-yard-admin:$BUILD_NUMBER'
          }

        }

      }
    }

    stage('部署') {
      agent none
      steps {
        container('maven') {
          withCredentials([
                                                  kubeconfigFile(
                                                      credentialsId: 'kubeconfig',
                                                      variable: 'KUBECONFIG')
                                                      ]) {
                sh 'envsubst < ruoyi-admin/deploy/deploy.yaml | kubectl apply -f -'
              }

            }

          }
        }

      }
    }

5. 可视化流水线设置说明

- 粘贴以上Jenkinsfile文件,点编辑流水线

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第4张图片

- 拉取

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第5张图片

  • Url:git地址
  • 凭证名称:选择我们创建的my-login名称的凭证,就是我们配置的git登录的账号密码
  • 分支:就是拉取哪个分支

- 编译

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第6张图片

  • 这里需要指定容器运行shell命令,否则会报错
  • 第二个shell脚本就是我们编译的maven命令
  • 打包

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第7张图片

  • 同样也需要指定容器
  • 第二个shell脚本就是我们打镜像的命令

Dockerfile文件内容:

FROM openjdk:8-jdk

MAINTAINER 作者

ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /ruoyi-admin

WORKDIR /ruoyi-admin

EXPOSE 8080

ADD ./ruoyi-admin/target/ruoyi-admin.jar ./

CMD sleep 5;java $JAVA_OPTS -jar ruoyi-admin.jar

- 推送

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第8张图片

  • 这里需要指定容器——>添加凭证
  • 声明:我这里使用凭证的账号密码变量不好使,所以就写死了
  • 第一个shell脚本是登录阿里云容器镜像仓库
  • 第二个shell脚本是打镜像命令
  • 第三个是将我们打的镜像推送到阿里云镜像仓库

- 部署

k8s KubeSphere流水线部署SpringBoot后端项目 详细教程_第9张图片

  • 添加容器——>凭证,这个凭证是我们创建当前用户kubeconfig凭证
  • shell脚本命令就是执行部署的命令,不要使用kubernetesDeploy部署,这个到后面会停止使用、

deploy.yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: dream-yard-admin
  name: dream-yard-admin
  namespace: dream-yard # 正常创建的项目空间名称
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  strategy:
    type: RollingUpdate # Recreate:在创建新Pods之前,所有现有的Pods会被杀死 RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数
    rollingUpdate:
      maxSurge: 1  #maxSurge:1 表示滚动升级时会先启动1个pod
      maxUnavailable: 1 #maxUnavailable:1 表示滚动升级时允许的最大Unavailable的pod个数,也可以填写比例,maxUnavailable=50%
  selector:
    matchLabels:
      app: dream-yard-admin
  template:
    metadata:
      labels:
        app: dream-yard-admin
    spec:
      containers:
        - env:
            - name: CACHE_IGNORE
              value: js|html
            - name: CACHE_PUBLIC_EXPIRATION
              value: 3d
          image: registry.cn-hangzhou.aliyuncs.com/dream-yard/dream-yard-admin:$BUILD_NUMBER
          readinessProbe:
            httpGet:
              path: /
              port: 8080
            timeoutSeconds: 10
            failureThreshold: 30
            periodSeconds: 5
          imagePullPolicy: Always
          name: dream-yard-admin
          ports:
            - containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 300m
              memory: 600Mi
            requests:
              cpu: 100m
              memory: 100Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: dream-yard-admin-service
  name: dream-yard-admin-service
  namespace: dream-yard # 正常创建的项目空间名称
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: dream-yard-admin
  sessionAffinity: None
  type: NodePort

6. 以上就完成啦

点个爱心和关注吧

你可能感兴趣的:(DevOps,k8s,Linux,spring,boot,docker,shardingsphere,k8s,devops)