KubeSphere部署芋道源码ruoyi-vue-pro

news2024/11/13 16:02:47

KubeSphere环境准备

新建企业空间

在这里插入图片描述

新建项目

在这里插入图片描述

创建harbor镜像服务信息

在这里插入图片描述

新建DevOps 项目

创建git,harbor,kubeconfig凭证

在这里插入图片描述

中间件部署

  • MySQL8部署
  • redis6部署

后端部署

  • 修改pom.xml
<!-- pom.xml添加内容:-->
<profiles>
        <!-- 本地环境 -->
        <profile>
            <id>local</id>
            <properties>
                <profile.active>local</profile.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <!-- 开发环境 -->
        <profile>
            <id>dev</id>
            <properties>
                <profile.active>dev</profile.active>
            </properties>
        </profile>
        <!-- 测试环境 -->
        <profile>
            <id>test</id>
            <properties>
                <profile.active>test</profile.active>
            </properties>
        </profile>
        <!-- 生产环境-->
        <profile>
            <id>prod</id>
            <properties>
                <profile.active>prod</profile.active>
            </properties>
        </profile>
    </profiles>

 <!-- buil标签添加内容 -->
 	<resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
	</resources>
  • 修改application.yaml
# spring.profiles.active 动态取值
spring:
  profiles:
    active: @profile.active@
  • 修改Dockerfile
FROM hcd1129/jdk11 as builder
MAINTAINER cc cc@qq.com

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

COPY target/yudao-server.jar /app.jar

EXPOSE 8080
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Xss1024k -Djava.security.egd=file:/dev/./urandom"
CMD java -jar /app.jar $JAVA_OPTS
  • 修改Jenkinsfile
#!groovy
pipeline {

    agent {
        node {
            label 'maven && jdk11'
        }
    }

    environment {
        // DockerHub 凭证 ID(登录您的 DockerHub)
        DOCKER_CREDENTIAL_ID = 'ruoyi-harbor'
        //  GitHub 凭证 ID (推送 tag 到 GitHub 仓库)
        GITHUB_CREDENTIAL_ID = 'ruoyi-git'
        // kubeconfig 凭证 ID (访问接入正在运行的 Kubernetes 集群)
        KUBECONFIG_CREDENTIAL_ID = 'ruoyi-kubeconfig'
        // 镜像的推送
        HARBOR_REGISTRY = '192.168.1.106:81'
        //  DockerHub 账号名
        DOCKERHUB_NAMESPACE = 'ruoyi'
        // GitHub 账号名
        KUBE_NAMESPACE = 'source'
        GIT_URL = 'http://192.168.1.50/ry/ruoyi-vue-pro.git'
    }

    stages {

        stage('代码克隆') {
            agent none
            steps {
                container('maven') {
                    git(url: "$GIT_URL", credentialsId: "$GITHUB_CREDENTIAL_ID", branch: "$env.BRANCH_NAME", changelog: true, poll: false)
                    sh 'ls -l'
                }

            }
        }

        stage('项目编译develop') {
            agent none
            when {
                branch 'develop'
            }
            steps {
                container('maven') {
                    sh 'mvn clean package -Dmaven.test.skip=true -Pdev'
                }
            }
        }
        stage('项目编译master') {
            agent none
            when {
                branch 'master'
            }
            steps {
                container('maven') {
                    sh 'mvn clean package -Dmaven.test.skip=true -Pprod'
                }
            }
        }

        stage('构建镜像') {
            parallel {
                stage('构建ruoyi-vue-pro-server镜像') {
                    agent none
                    steps {
                        container('maven') {
                            sh 'docker build -t ruoyi-vue-pro-server:latest -f yudao-server/Dockerfile yudao-server/'
                        }
                    }
                }
            }
        }

        stage('推送镜像到仓库') {
            parallel {
                stage('推送ruoyi-vue-pro-server镜像到harbor') {
                    agent none
                    steps {
                        container('maven') {
                            withCredentials([usernamePassword(credentialsId : "$DOCKER_CREDENTIAL_ID" ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                                sh 'echo "$HARBOR_PWD_VAR" | docker login -u $HARBOR_USER_VAR --password-stdin $HARBOR_REGISTRY'
                                sh 'docker tag ruoyi-vue-pro-server:latest $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-vue-pro-server:SNAPSHOT-$BUILD_NUMBER'
                                sh 'docker push $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-vue-pro-server:SNAPSHOT-$BUILD_NUMBER'
                            }
                        }
                    }
                }
            }
        }

        stage('推送K8S环境') {
            parallel {
                stage('发到ruoyi-vue-pro-server到K8S环境') {
                    agent none
                    steps {
                        container('maven') {
                            withCredentials([kubeconfigContent(credentialsId : "$KUBECONFIG_CREDENTIAL_ID" ,variable : 'KUBECONFIG_CONFIG' ,)]) {
                                sh 'mkdir -p ~/.kube/'
                                sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
                                sh 'envsubst < yudao-server/deploy/deploy.yml | kubectl apply -f -'
                            }

                        }
                    }
                }
            }
        }


    }
}

  • 新建deploy/deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ruoyi-vue-pro-server
  name: ruoyi-vue-pro-server
  namespace: $KUBE_NAMESPACE   #一定要写名称空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-vue-pro-server
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ruoyi-vue-pro-server
    spec:
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime
            type: ''
      imagePullSecrets:
        - name: harbor  #提前在项目下配置访问阿里云的账号密码
      containers:
        - image: $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-vue-pro-server:SNAPSHOT-$BUILD_NUMBER
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 60
            timeoutSeconds: 1
            periodSeconds: 30
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 60
            timeoutSeconds: 1
            periodSeconds: 60
            successThreshold: 1
            failureThreshold: 3
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 8080
              protocol: TCP
          resources:
            limits:
              cpu: 2000m
              memory: 2048Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: ruoyi-vue-pro-server
  name: ruoyi-vue-pro-server
  namespace: $KUBE_NAMESPACE
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: ruoyi-vue-pro-server
  sessionAffinity: None
  type: ClusterIP

  • 新建流水线
    在这里插入图片描述
    选择代码仓库
    在这里插入图片描述
    在这里插入图片描述

指定扫描分支过滤,Jenkinsfile路径
在这里插入图片描述

正则过滤可使用 分支A|分支B|分支C 格式来指定扫描分支
在这里插入图片描述

分支扫描完成的状态,至此后端部署完毕
在这里插入图片描述

前端部署

  • 修改.env.dev,api调用地址
  • 修改Jenkinsfile
pipeline {
    agent {
        kubernetes {
            inheritFrom 'nodejs base'
            containerTemplate {
                name 'nodejs'
                image 'node:14.19.0'
            }

        }
    }

    environment {
        // DockerHub 凭证 ID(登录您的 DockerHub)
        DOCKER_CREDENTIAL_ID = 'ruoyi-harbor'
        //  GitHub 凭证 ID (推送 tag 到 GitHub 仓库)
        GITHUB_CREDENTIAL_ID = 'ruoyi-git'
        // kubeconfig 凭证 ID (访问接入正在运行的 Kubernetes 集群)
        KUBECONFIG_CREDENTIAL_ID = 'ruoyi-kubeconfig'
        // 镜像的推送
        HARBOR_REGISTRY = '192.168.1.106:81'
        //  DockerHub 账号名
        DOCKERHUB_NAMESPACE = 'ruoyi'
        // GitHub 账号名
        KUBE_NAMESPACE = 'source'
        GIT_URL = 'http://192.168.1.50/ry/ruoyi-admin-ui.git'
    }
    

    stages {

        stage('拉取代码') {
            steps {
                container('nodejs') {
                    git(url: "$GIT_URL", credentialsId: "$GITHUB_CREDENTIAL_ID", branch: "$env.BRANCH_NAME", changelog: true, poll: false)
                    sh 'ls -al'
                }
            }
        }

        stage('项目编译') {
            agent none
            steps {
                container('nodejs') {
                    sh 'npm install -g yarn --force'
                    sh 'yarn config get registry'
                    sh 'yarn config set registry https://registry.npmmirror.com/'
                    sh 'yarn config get registry'
                    sh 'yarn install'
                }
            }
        }


        stage('项目构建dev') {
            agent none
            when {
                branch 'develop'
            }
            steps {
                container('nodejs') {
                    sh 'yarn build:dev'
                    sh 'ls -a'
                }
            }
        }
        stage('项目构建master') {
            agent none
            when {
                branch 'master'
            }
            steps {
                container('nodejs') {
                    sh 'yarn build:prod'
                    sh 'ls -a'
                }
            }
        }

        stage('构建ruoyi-admin-ui镜像') {
            agent none
            steps {
                container('base') {
                    sh 'ls -a'
                    sh 'docker build -t ruoyi-admin-ui:latest -f Dockerfile ./'
                }

            }
        }

        stage('推送ruoyi-admin-ui镜像到harbor') {
            agent none
            steps {
                container('base') {
                    withCredentials([usernamePassword(credentialsId: "$DOCKER_CREDENTIAL_ID", passwordVariable: 'HARBOR_PWD_VAR', usernameVariable: 'HARBOR_USER_VAR',)]) {
                        sh 'echo "$HARBOR_PWD_VAR" | docker login -u $HARBOR_USER_VAR --password-stdin $HARBOR_REGISTRY'
                        sh 'docker tag ruoyi-admin-ui:latest $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-admin-ui:SNAPSHOT-$BUILD_NUMBER'
                        sh 'docker push $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-admin-ui:SNAPSHOT-$BUILD_NUMBER'
                    }

                }

            }
        }

        stage('发到ruoyi-admin-ui到K8S环境') {
            agent none
            steps {
                container('base') {
                    withCredentials([kubeconfigContent(credentialsId: "$KUBECONFIG_CREDENTIAL_ID", variable: 'KUBECONFIG_CONFIG',)]) {
                        sh 'mkdir -p ~/.kube/'
                        sh 'echo "$KUBECONFIG_CONFIG" > ~/.kube/config'
                        sh 'envsubst < deploy.yml | kubectl apply -f -'
                    }

                }

            }
        }
        

    }

}

  • 新建deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ruoyi-admin-ui
  name: ruoyi-admin-ui
  namespace: $KUBE_NAMESPACE   #一定要写名称空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-admin-ui
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ruoyi-admin-ui
    spec:
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime
            type: ''
      imagePullSecrets:
        - name: harbor  #提前在项目下配置访问阿里云的账号密码
      containers:
        - image: $HARBOR_REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-admin-ui:SNAPSHOT-$BUILD_NUMBER
          imagePullPolicy: Always
          name: app
          ports:
            - containerPort: 80
              protocol: TCP
          resources:
            limits:
              cpu: 2000m
              memory: 1024Mi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: ruoyi-admin-ui
  name: ruoyi-admin-ui
  namespace: $KUBE_NAMESPACE
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: ruoyi-admin-ui
  sessionAffinity: None
  type: ClusterIP

  • 修改Dockerfile
FROM nginx
COPY ./dist/ /usr/share/nginx/html/

EXPOSE 80

  • 新建流水线
  • 选择代码仓库
  • 指定扫描分支过滤,Jenkinsfile路径
  • 分支扫描完成的状态,至此后端部署完毕
    在这里插入图片描述

gitLab配置自动打包

  • 复制Webhook地址
    在这里插入图片描述
  • 添加到gitlab,不要勾选SSL证书验证
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/824594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《当今奇人周兴和》励志小说连载之三 ● 饥饿寒冷童年梦

饥饿寒冷童年梦 Hungry and cold childhood 兴和至今也记得&#xff0c;这年冬天特别冷。 Xinghe still remembers that the winter was particularly cold in that year. 那一天&#xff0c;放了学的小兴和背着书兜&#xff0c;又冷又饿地从毛公乡小学出来&#xff0c;艰难…

渠道控价的常见方法

品牌渠道一般分为线上和线下&#xff0c;现在常见要治理的渠道一般指的是线上&#xff0c;因为线上渠道数据变化快&#xff0c;价格波动也很大&#xff0c;促销信息有很多&#xff0c;如果遇到大促&#xff0c;涉及的价格变化将会更明显&#xff0c;所以线上渠道是非常值得控价…

OA办公自动化系统设计与实现(论文+源码)_kaic

摘要 随着信息化建设的日益深入&#xff0c;无论是政府还是企事业单位&#xff0c;部门之间的信息沟通与协调工作越来越重要。人们迫切需要一个能充分利用网络优势&#xff0c;并可以管理企业的各种重要信息的软件平台&#xff0c;利用该平台快速建立自己的信息网络和办公管理系…

华为PMS API client token auth failed

对接华为pms时出现问题&#xff0c;提示华为PMS API client token auth failed 主要是权限的问题&#xff0c;创建项目的时候选择N/A

u盘数据不知道什么时候全没了怎么恢复

案例&#xff1a;“你好&#xff0c;我发现我的U盘上的所有数据都不知何时消失了&#xff0c;我之前保存了许多重要的文件和照片&#xff0c;U盘数据不知道什么时候全没了怎么恢复&#xff1f;大神你知道么” 随着U盘的广泛应用&#xff0c;数据丢失问题也日益突出。很多人发现…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 4

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

chrome扩展在popup、background、content之间通信解决传输文件问题

文章目录 背景介绍案例介绍代码示例popup页面&#xff0c;上传文件页面popup页面&#xff0c;js上传代码&#xff0c;file文件转base64background监听消息&#xff0c;base64转file文件&#xff0c;axios上传 附-转base64后直接下载 背景介绍 示例扩展API版本MV2。 以弹…

Linux下安装配置Redis

文章目录 安装依赖库上传安装包并解压 启动默认启动指定配置启动开机自启 安装 依赖库 Redis是基于C语言编写的&#xff0c;因此首先需要安装Redis所需要的gcc依赖&#xff1a; yum install -y gcc tcl上传安装包并解压 将Redis安装包上传到服务器的任意目录&#xff0c;例…

使用WebMvcConfigurationSupport后导致原来返回的json数据变为了xml的解决方法

问题 未使用WebMvcConfigurationSupport拦截时返回的数据都是JSON格式&#xff0c;使用WebMvcConfigurationSupport做拦截后数据的返回变为了XML的格式。 原因 在Spring框架中&#xff0c;WebMvcConfigurationSupport 是一个类&#xff0c;它可以用于自定义Spring MVC的配置…

【word密码】如何解密word密码?

Word文档常见的两种加密方式&#xff0c;打开密码和限制编辑&#xff0c;这两种密码对word文档加密&#xff0c;今天我们来讲一下这三种加密如何解密 解密一&#xff1a;打开密码 设置了打开密码的word文件&#xff0c;想要解密&#xff0c;我们需要先输入密码进入到文件当中…

IO进程线程第四天(8.1)opendir,closedir,readdir

作业1&#xff1a; 从终端获取一个文件的路径以及名字。 若该文件是目录文件&#xff0c;则将该文件下的所有文件的属性显示到终端&#xff0c;类似ls -l该文件夹 若该文件不是目录文件&#xff0c;则显示该文件的属性到终端上&#xff0c;类似ls -l这单个文件 #include<…

华为OD机试真题 JavaScript 实现【箱子之形摆放】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例…

【Uniapp 中实现微信登录】

要在 Uniapp 中实现微信登录&#xff0c;需要完成以下步骤&#xff1a; 在微信开放平台注册一个应用&#xff0c;并获取到该应用的 AppID 和 AppSecret。 在 manifest.json 中点击App模块配置。勾选微信登录模块&#xff0c;填入该应用的 AppID 在代码中调用 uni.login 方法&…

学习记录——EGE-UNet、CFNet

EGE-UNet: an Efficient Group Enhanced UNet for skin lesion segmentation 上海交大 2023 MICCAI 基于 U-Net 进行魔改&#xff0c;用于解决医学图像&#xff08;尤其是皮肤病变&#xff09;分割中面临的问题。由于它是针对移动健康应用开发的&#xff0c;解决了当前许多模型…

docker下载镜像慢

下载镜像的方法 手动下载&#xff0c;然后再打开 此方法有局限&#xff0c;因为不是所有的镜像地址都支持http访问。 方法是打开此镜像市场网站&#xff0c;搜索自己想要的镜像&#xff0c;然后点击下载即可。 Linux一般是下载一个压缩包&#xff0c;解压之后docker load就可…

用于医学图像分类的双引导的扩散网络

文章目录 DiffMIC: Dual-Guidance Diffusion Network for Medical Image Classification摘要本文方法实验结果 DiffMIC: Dual-Guidance Diffusion Network for Medical Image Classification 摘要 近年来&#xff0c;扩散概率模型在生成图像建模中表现出了显著的性能&#xf…

【update】自动更新设计小记

前情纪要 老项目的一个更新迭代实例方式处理&#xff0c;从功能梳理&#xff0c;待流程设计,…了解功能&#xff0c;时序图&#xff0c;流程图记录 关系图梳理 流程图设计

ChatGPT及其工作原理;OpenAI申请注册商标GPT-5,引发关注

&#x1f989; AI新闻 &#x1f680; OpenAI申请注册商标GPT-5&#xff0c;引发关注 摘要&#xff1a;OpenAI已在上月18日申请注册商标GPT-5&#xff0c;显示该模型将提供文本生成、自然语言理解、语音转录、翻译、分析等功能。此前OpenAI曾表示尚未开始训练GPT-4的后继者GPT…

Java培训去哪?Java培训普遍花费贵吗?

随着Java开发语言1995年诞生到如今&#xff0c;跨越了20个春夏秋冬&#xff0c;是时下最热的开发语言之一&#xff0c;想要接触了解的人群越来越多。对绝大多数准备学习java这门的学员来讲&#xff0c;Java培训去哪是一个绕不开的问题。接下里笔者就和大家一起探讨一下。 普遍来…

解决有道云笔记自动更新问题 关闭有道云笔记自动更新 有道云笔记自动升级v7.2.8

解决有道云笔记自动更新问题 关闭有道云笔记自动更新 有道云笔记自动升级v7.2.8 一、背景 最近使用有道云笔记时&#xff0c;遇到bug问题&#xff1a; 打不开加密的笔记&#xff0c;发现是最新版本v7.2.8&#xff0c;切换到v7.2.7后&#xff0c;一切恢复正常。 在使用有道云笔…