meterSphere二开遇到的问题

官方文档:metersphere.io/docs/v3.x/d…

1. 前端无法启动,报样式错误

包版本:"less": "^4.2.2""less": "4.2.2"

使用pom中配置的node、npm版本

<node.version>v20.8.1</node.version>
<pnpm.version>8.4.0</pnpm.version>

2. 前端启动后缺少图片资源

按官方文档先打包,第三步test报错可以加上-DskipTests

#1 依赖打包 
# 此命令会将parent pom 安装到本地仓库,其他外部子工程可以获得最新的 <properties></properties>
./mvnw install -N

# 此命令会将 domain sdk ,其他外部子工程可以获得最新的 jar
./mvnw clean install -DskipTests -DskipAntRunForJenkins --file backend/pom.xml

#2 整体打包
./mvnw clean package

3. 前端打包报错,typescript报错

去掉package.json中的打包命令中的 vue-tsc --noEmit &&

tsconfig.json中关闭严格"strict": false, // 关闭严格模式

4. metersphere中无法运行测试用例

需要启动task_runner,参考下方官方文档

metersphere.io/docs/v3.x/i…

5. 测试用例显示运行成功,但是任务一直显示执行中

需要启动result_hub,需要下载离线安装包,通过docker compose启动

6. 首页报错

 Cause: java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list, references column 'metersphere.urr.create_time' which is not in SELECT list; this is incompatible with DISTINCT

修改 \opt\metersphere\conf 数据库连接配置

加上

&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

7. 打包后无法从dockerfile部署

  • 缺少backend/app/target/dependency目录及文件

参考项目 Jenkinsfile 文件,执行 cd backend/app/target/dependency && jar -xf ../*.jar

8. 无法新增用户

9. 如何把最新代码替换进离线安装包

docker load -i metersphere-ce-offline-installer-v3.6.7-lts\metersphere-ce-offline-installer-v3.6.7-lts\images\metersphere.tar

可以看到tar包含下面的镜像

查看docker-compose文件可以发现,result_hub、task_runner及 metersphere 都是用的同个镜像,即 registry.fit2cloud.com/metersphere/metersphere-ce:v3.6.7-lts

所以只需要替换掉 metersphere-ce 中二次开发的最新代码再把镜像导出即可,位置是 /metersphere

10. dockerfile通过源码jar包部署

registry.fit2cloud.com/metersphere/metersphere-ce:v3.6.7-lts 中提取 jmeter文件夹,或者从打包文件中提取 backend/app/target/classes/jmeter/bin,放到容器中的 /opt/jmeter/bin

# ========== 第一阶段:构建阶段(Maven + Node + PNPM 打包) ==========
FROM maven:3.9.12-amazoncorretto-21-debian AS builder

# 设置工作目录
WORKDIR /app

# 1. 安装依赖工具:curl(下载) + xz-utils(解压xz包) + gnupg(npm依赖)
    #替换 Debian 源为阿里云(解决 apt-get update 慢)
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    xz-utils \
    gnupg && \
    # 下载并安装 Node.js v20.8.1(.xz格式需要xz-utils解压)
    curl -fsSL https://nodejs.org/dist/v20.8.1/node-v20.8.1-linux-x64.tar.xz | tar -xJ -C /usr/local --strip-components=1 && \
    # 验证 Node/NPM 版本
    node -v && npm -v && \
    # 安装 PNPM 8.4.0
    npm install -g pnpm@8.4.0 && \
    # 验证 PNPM 版本
    pnpm -v && \
    # 清理缓存减小镜像体积(关键:避免apt缓存占用空间)
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# 2. 拷贝项目所有代码到构建目录
COPY . .

# 3. 执行 Maven 打包命令(按你的要求分步执行)
# 3.1 安装 parent pom 到本地仓库
RUN mvn install -N
# 3.2 安装 domain sdk(backend 模块)
RUN mvn clean install -DskipTests -DskipAntRunForJenkins --file backend/pom.xml
# 3.3 整体打包
RUN mvn clean package -DskipTests

# ========== 第二阶段:运行阶段(JRE21 环境) ==========
FROM eclipse-temurin:21-jre-alpine

# 设置工作目录
WORKDIR /opt/app

# 1. 创建 jmeter 目录(确保目录存在)
RUN mkdir -p /opt/jmeter/bin

# 2. 从构建阶段拷贝打包产物(jar包)到运行目录
COPY --from=builder /app/backend/app/target/app-3.x.jar /opt/app/app.jar

# 3. 拷贝项目中的 jmeter配置 到指定路径
COPY --from=builder /app/backend/app/target/classes/jmeter/bin/ /opt/jmeter/bin/

# 4. 设置环境变量(编码、时区等)
ENV LANG=C.UTF-8 \
    LC_ALL=C.UTF-8 \
    TZ=Asia/Shanghai

# 5. 暴露端口(根据实际业务需要调整,比如8080)
EXPOSE 8080

# 6. 启动命令(包含所有指定JVM参数)
ENTRYPOINT ["java", \
            "-Dfile.encoding=utf-8", \
            "-Djava.awt.headless=true", \
            "--add-opens", "java.base/jdk.internal.loader=ALL-UNNAMED", \
            "--add-opens", "java.base/java.util=ALL-UNNAMED", \
            "-jar", "/opt/app/app.jar"]