目录
前言
本文主要记录在window环境配置MeterSphere开发环境,与官方文档出入处。具体步骤参考: metersphere官方开发文档
拉取代码
- 【省去】无需拉取ms-jmeter-core项目代码
因为自 v2.4版本开始,此部分代码已经移动到主工程metersphere/framework/sdk-parent/jmeter 中 - 【增加】拉取metersphere-platform-plugin项目代码
- 安装到本地仓库:mvn clean install
- 修改父工程的pom文件中
platform-plugin-sdk.version
版本号,与本地安装的插件sdk版本一致(否则父工程会出现metersphere-platform-plugin-sdk依赖爆红)
- 安装到本地仓库:mvn clean install
配套服务
后端: Mysql、Redis、Kafka、Minio等服务
前端: nodejs服务
后端
后端配套服务可自己百度搜索一一搭建或者参考官方文档。
本文为求方便快速,直接使用官方文档>安装部署>linux中部署>离线安装方式,完成配套中间件服务的安装配置。
-
通过下载MeterSphere 最新版本的离线安装包,解压后,上传到到目标机器的 /tmp 目录下
-
执行安装脚本
cd /tmp/metersphere-offline-installer-v2.x.x /bin/bash install.sh
-
配套服务的端口和密码可以通过install.conf和对应yaml文件确认
前端
本文采用conda虚拟环境配置nodejs
// 创建虚拟环境
conda create -n vben2
// 激活虚拟环境(window环境去掉conda)
conda activate vben2
// 安装nodejs
conda install -c conda-forge nodejs
// 验证安装效果
node -v
npm -v
# 全局安装pnpm
npm install -g pnpm
# 验证
pnpm -v # 出现对应版本号即代表安装成功
# 安装依赖
pnpm i
注意:若出现npm install 报版本错误,删除package-lock.json文件
项目初始化配置
- windows系统,注意metersphere.properties 的位置:
opt与主工程在同一级目录下
- 根据实际中间件服务配置,修改metersphere.properties对应配置信息
- 非本地安装的中间件,修改localhost
- 中间件服务对应端口号(port)
- 账号密码等(username、password、accessKey、secretKey)
- /opt/metersphere/conf/目录下,增加redisson.yml配置
metersphere.properties
# eureka 配置
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# 数据库配置
spring.datasource.url=jdbc:mysql://192.168.11.204:3307/metersphere_dev?autoReconnect=false&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=Password123@mysql
# kafka 配置,node-controller 以及 data-streaming 服务需要使用 kafka 进行测试结果的收集和处理
kafka.partitions=1
kafka.replicas=1
kafka.topic=JMETER_METRICS
kafka.test.topic=JMETER_TESTS
kafka.bootstrap-servers=192.168.11.204:9092
kafka.log.topic=JMETER_LOGS
kafka.report.topic=JMETER_REPORT
# node-controller 所使用的 jmeter 镜像版本
jmeter.image=registry.cn-qingdao.aliyuncs.com/metersphere/jmeter-master:5.5-ms2-jdk11
# TCP Mock 端口范围
tcp.mock.port=10000-10010
# Redis 配置
spring.redis.host=192.168.11.204
spring.session.store-type=redis
spring.redis.port=6379
spring.redis.password=Password123@redis
# 启动模式,lcoal 表示以本地开发模式启动
run.mode=local
# minio 配置
minio.endpoint=http://192.168.11.204:9000
minio.accessKey=admin
minio.secretKey=Password123@minio
## CAS
#cas.client.name=MS_SERVER
## CAS SERVER URL
#cas.server.url=http://xxx/cas
## METERSPHERE SERVER URL
#cas.client.url=http://IP:8081
redisson.yml
Redisson 的优势是提供了很多开箱即用的 Redis 高级功能,很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列等。参考:配置方法
# 单节点配置
singleServerConfig:
# 节点地址
address: redis://192.168.11.204:6379
# 密码
password: Password123@redis
# 客户端名称
clientName: null
# 数据库编号
database: 6
# 连接空闲超时,单位:毫秒
idleConnectionTimeout: 10000
# 连接超时,单位:毫秒
connectTimeout: 10000
# 命令等待超时,单位:毫秒
timeout: 3000
# 命令失败重试次数,如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。
# 如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。
retryAttempts: 3
# 命令重试发送时间间隔,单位:毫秒
retryInterval: 1500
# 单个连接最大订阅数量
subscriptionsPerConnection: 5
# 发布和订阅连接的最小空闲连接数
subscriptionConnectionMinimumIdleSize: 1
# 发布和订阅连接池大小
subscriptionConnectionPoolSize: 50
# 最小空闲连接数
connectionMinimumIdleSize: 32
# 连接池大小
connectionPoolSize: 64
# DNS监测时间间隔,单位:毫秒
dnsMonitoringInterval: 5000
# 线程池数量,默认值: 当前处理核数量 * 2
#threads: 0
# Netty线程池数量,默认值: 当前处理核数量 * 2
#nettyThreads: 0
# 编码
codec: !<org.redisson.codec.JsonJacksonCodec> {}
# 传输模式
transportMode : "NIO"
项目打包和启动
-
【多余】前端项目打包和启动
-
为方便开发环境可以使用浏览器vue-devtools插件工具调试,在所需调试的模块前端代码入口(比如api-test/frontend/src/main.js),增加一行
Vue.config.devtools = true;
-
window环境用
mvnw
替代./mvnw
若报错,参考下文处理方案 -
启动eureka,验证效果:http://localhost:8761/
-
启动SettingApplication,可以看到在eureka处注册成功
- 启动网关服务geteway,打开网址http://localhost:8000/,开启本地多模块调试(根据需要,启动对应后端服务即可)
用户名: admin
密码: metersphere
存在问题和解决方案
【后端】mysql连接报1251错误
分析原因:mysql8.0的plugin与之前的版本有差异。mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
解决办法:把mysql用户登录密码加密规则还原成mysql_native_password.
// 进入mysql容器
docker exec -it mysql /bin/bash
// 登录mysql
mysql -h localhost -P3307 -uroot -p(这里的3307是自己设置的端口号,自己设置是什么就填什么)
输入密码:Password123@mysql
// 查看当前加密规则
select host,user,plugin,authentication_string from mysql.user;
// 修改连接账号的加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Password123@mysql';
// 刷新权限
FLUSH PRIVILEGES;
【后端】mvnw 使用报错
背景
maven是一款非常流行的java项目构建软件,它集项目的依赖管理、测试用例运行、打包、构件管理于一身,是我们工作的好帮手,maven飞速发展,它的发行版本也越来越多,如果我们的项目是基于maven构件的,那么如何保证拿到我们项目源码的同事的maven版本和我们开发时的版本一致呢,可能你认为很简单,一个公司嘛,规定所有的同事都用一maven版本不就万事大吉了吗?一个组织内部这是可行的,要是你开源了一个项目呢?如何保证你使用的maven的版本和下载你源码的人的maven的版本一致呢,这时候mvnw就大显身手了。
mvnw 全名是maven wrapper,它的原理是在maven-wrapper.properties文件中记录你要使用的maven版本,当用户执行mvnw clean 命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令,比如刚才的mvn clean。
mvnw使用步骤
下载maven
对于 Windows 系统,下载 .zip 格式的文件并解压
添加maven环境变量
M2_HOME = maven解压目录地址
Windows可以把%M2_HOME%\bin添加到系统Path变量中
此时 Maven 就安装完成了,可以在命令行中运行 mvn -v 查看是否安装成功
修改配置文件
将 D:\apache-maven-3.x.x\conf\ 目录下的 settings.xml 文件的移动到用户目录的 /.m2 文件夹内;并根据实际开发需要进行localRepository(本地仓库地址)和mirrors(镜像源)配置
下载Wrapper 插件
cd 到 Java 项目的根目录
,确保根目录下存在 pom.xml 文件,在命令行执行 mvn wrapper:wrapper
,就会将 Wrapper 的相关文件下载到当前目录
Wrapper 下载完成以后,需要使用 mvnw
命令来代替 mvn 命令(window环境)
在Linux或macOS下运行时需要加上./
使用mvnw
mvnw install -N