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

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

1. 创建流水线项目

cf8aae29c773407180c0dc3b00ea05ce.png


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

ee577736f07d4b2c8bcbd657b99bf585.png


kubeconfig类型:默认内容为当前用户的 kubeconfig 配置。 选择此类型创建默认有值

用户名密码(my-login):git账号和密码

用户名密码(my-aliyun-docker):阿里云容器镜像仓库账号密码

3. 创建流水线

e8fb58039c104456b337a0cee4e48338.png


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文件,点编辑流水线

e92ae362f50e4650973e3e8d6a218f68.png


- 拉取

ea9ec399528942e49b9980cd6f15e1cc.png


Url:git地址

凭证名称:选择我们创建的my-login名称的凭证,就是我们配置的git登录的账号密码

分支:就是拉取哪个分支

- 编译

0ffa16f20b1b425c8ab3d42b5be674a6.png


这里需要指定容器运行shell命令,否则会报错

第二个shell脚本就是我们编译的maven命令

打包

e136c9dc943646bba0b27c652b5383fc.png


同样也需要指定容器

第二个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

- 推送

2d9363b7184b48898b9203ca45f64d9d.png


这里需要指定容器——>添加凭证

声明:我这里使用凭证的账号密码变量不好使,所以就写死了

第一个shell脚本是登录阿里云容器镜像仓库

第二个shell脚本是打镜像命令

第三个是将我们打的镜像推送到阿里云镜像仓库

- 部署

ef51438a2d2b4bf687679deed1c15eab.png


添加容器——>凭证,这个凭证是我们创建当前用户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. 以上就完成啦

点个爱心和关注吧


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
19天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
26天前
|
Java API Spring
SpringBoot项目调用HTTP接口5种方式你了解多少?
SpringBoot项目调用HTTP接口5种方式你了解多少?
80 2
|
2天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
16天前
|
JSON 前端开发 Java
统一异常处理:让Spring Boot项目异常更优雅
统一异常处理:让Spring Boot项目异常更优雅
25 1
|
19天前
|
JSON 前端开发 Java
Springboot前后端分离项目统一封装返回结果
Springboot前后端分离项目统一封装返回结果
|
26天前
|
前端开发 JavaScript Java
6个SpringBoot 项目拿来就可以学习项目经验接私活
6个SpringBoot 项目拿来就可以学习项目经验接私活
34 0
|
1月前
|
前端开发 Java 关系型数据库
SpringBoot+MyBatis 天猫商城项目
SpringBoot+MyBatis 天猫商城项目
57 1
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
42 0
|
1月前
|
NoSQL Java 数据库
【问题篇】springboot项目通过数据库限制实例端口号
【问题篇】springboot项目通过数据库限制实例端口号
19 0
|
29天前
|
Java Maven 微服务
springboot项目开启远程调试-jar包
springboot项目开启远程调试-jar包
20 0