可快速搭建微服务开发环境,实现代码持续集成与自动部署。基于Mendmix cloud、Spring Cloud Gateway等技术,整合华为云CCE、OBS等服务,提供数据库、缓存等组件集成能力。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 |
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
项目背景
Mendmix-cloud定位是一站式云原生架构技术底座。Mendmix-cloud提供了数据库、缓存、消息中间件、分布式定时任务、安全框架、网关以及主流产商云服务快速集成能力。本项目基于Mendmix cloud + Spring cloud gateway + spring boot jpa + GaussDB 搭建微服开发脚手架,基于华为云CCE,OBS,SWR,CodeArts,实现代码持续集成,自动部署功能。
源码地址:https://gitee.com/dromara/mendmix-cloud
开发过程
1. 创建工程,目录结构如下
- mendmix-cloud-demo #pom 依赖管理
--apis-server #服务api入口
--eureka-server #eureka服务注册中心
--gateway-server #网关服务
--gaussdb-demo-server #使用gaussdb demo示例服务 - IDEA创建项目如下图

2. maven依赖配置
- eureka-server pom.xml依赖配置
<project>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>3.1.1</version>
</dependency>
</project>
- gateway-server pom.xml 依赖配置
<project>
<dependency>
<groupId>com.mendmix</groupId>
<artifactId>mendmix-gateway</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.1.1</version>
</dependency>
</project>
- gaussdb-demo-server pom.xml 依赖核心配置
<project>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Database access -->
<!-- 引入lib目录下jar包 -->
<dependency>
<groupId>org.opengauss</groupId>
<artifactId>opengauss-jdbc</artifactId>
<version>5.0.0-htrunk3.csi.gaussdb_kernel.opengaussjdbc.r3</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/gsjdbc4.jar</systemPath>
</dependency>
<!-- plug配置允许引入lib目录下jar包 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</project>
3. dockerfile编写
- eureka-server 模块
FROM openjdk:17-alpine
LABEL authors="wmwei"
RUN mkdir -p /opt
COPY target/eureka-server.jar /opt
WORKDIR /opt
EXPOSE 8761
ENTRYPOINT ["java", "-jar","eureka-server.jar"]
- gateway-server 模块
FROM openjdk:17-alpine
LABEL authors="wmwei"
RUN mkdir -p /opt
COPY target/gateway-server.jar /opt
WORKDIR /opt
EXPOSE 8080
ENTRYPOINT ["java", "-jar","gateway-server.jar"]
- gaussdb-demo-server 模块
FROM openjdk:17-alpine
LABEL authors="wmwei"
RUN mkdir -p /opt
COPY target/gaussdb-used-server.jar /opt
WORKDIR /opt
EXPOSE 8088
ENTRYPOINT ["java", "-jar","gaussdb-used-server.jar"]
4. kubernetes YAML 编写
- eureka-server 模块
apiVersion: v1
kind: Service
metadata:
name: eureka-server
spec:
selector:
app: eureka-server-pods
ports:
- protocol: TCP
port: 8761
targetPort: 8761
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka-server
labels:
app: eureka-server-deploy
spec:
replicas: 1
selector:
matchLabels:
app: eureka-server-pods
template:
metadata:
name: eureka-server
labels:
app: eureka-server-pods
spec:
containers:
- name: eureka-server-container
image: swr.cn-north-4.myhuaweicloud.com/wmwei/eureka-server:0.0.1
env:
- name: EK_SERVER
value: "eureka-server:8761"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8761
protocol: TCP
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "250m"
imagePullSecrets:
- name: default-secret
restartPolicy: Always
- gateway-server 模块
apiVersion: v1
kind: Service
metadata:
name: gateway-server
spec:
selector:
app: gateway-server-pods
ports:
- protocol: TCP
port: 8080
targetPort: 8080
nodePort: 30100
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway-server
labels:
app: gateway-server-deploy
spec:
replicas: 1
selector:
matchLabels:
app: gateway-server-pods
template:
metadata:
name: gateway-server
labels:
app: gateway-server-pods
spec:
containers:
- name: gateway-server-container
image: swr.cn-north-4.myhuaweicloud.com/wmwei/gateway-server:0.0.1
env:
- name: EK_SERVER
value: "eureka-server:8761"
- name: GAUSSDB-SERVER
value: "gaussdb-used-server:8088"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "250m"
imagePullSecrets:
- name: default-secret
restartPolicy: Always
- gaussdb-demo-server 模块
apiVersion: v1
kind: Service
metadata:
name: gaussdb-used-server
spec:
selector:
app: gaussdb-used-pods
ports:
- protocol: TCP
port: 8088
targetPort: 8088
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gaussdb-used
labels:
app: gaussdb-used-deploy
spec:
replicas: 1
selector:
matchLabels:
app: gaussdb-used-pods
template:
metadata:
name: gaussdb-used
labels:
app: gaussdb-used-pods
spec:
containers:
- name: gaussdb-used-container
image: swr.cn-north-4.myhuaweicloud.com/wmwei/gaussdb-used-server:0.0.1
env:
- name: EK_SERVER
value: "eureka-server:8761"
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
key: DB_PASSWORD
name: opengauss
- name: DB_URL
valueFrom:
configMapKeyRef:
key: DB_URL
name: opengauss
- name: DB_USERNAME
valueFrom:
configMapKeyRef:
key: DB_USERNAME
name: opengauss
- name: DB_DRIVER
valueFrom:
configMapKeyRef:
key: DB_DRIVER
name: opengauss
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8088
protocol: TCP
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "250m"
imagePullSecrets:
- name: default-secret
restartPolicy: Always
5. 部署代码
- CodeArts控制台--创建项目--代码托管--新建仓库

- CodeArts控制台--持续交付--编译构建--新建任务
- 任务一:上传kubernetes yaml至OBS,通过预置插件“上传文件到OBS” 图片上传失败,等后面更新
- 任务二:构建项目并上传镜像至SWR仓库,通过预置插件“通过dockerfile制作镜像并推送至SWR仓库” 图片上传失败,等后面更新
- CodeArts控制台--持续交付--部署--新建任务
- 任务:部署镜像至ECC,通过kubernetes manifest插件,执行上传到OBS的kubernetes yaml文件
- 部署执行过程
- 步骤一:执行构建任务一,上传kubernetes yaml至OBS
- 步骤二:执行构建任务二,构建项目并上传镜像至SWR仓库
- 步骤三:发布任务,部署镜像至ECC
- 最后:通过gateway网关服务访问gaussdb demo提供api
开发总结
- 本文主要是结合Mendmix cloud开源框架和华为GaussDB数据库,搭建微服开发脚手架,整合华为云CCE,SWR,OBS,CodeArts实现微服务容器化部署,持续集成,自动构建,一键发布等功能。
- demo地址:https://gitee.com/wmwei/mendmix-cloud-demo
- 博客地址:https://bbs.huaweicloud.com/blogs/439256
- demo运行结果关键截图

- demo运行环境资源清单
| 产品名称 | 产品类型 | 数据库引擎版本 | 内核引擎版本 | 实例类型 | 部署形态 | 备注 |
|---|---|---|---|---|---|---|
| 云数据库 GaussDB | 基础版 | V2.0-8.* | 505.1.* | 集中式 | 1主2备 | 推荐 |
| 产品名称 | 集群类型 | 集群版本 | 集群规模 | 备注 |
|---|---|---|---|---|
| 云容器引擎 CCE | CCE Standard 集群 | V1.29 | 50 | 推荐 |
| 产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 |
|---|---|---|---|---|---|
| 弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |