You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线部署Jfrog时Artifactory配置阶段Maven构建失败

问题核心判定

该错误并非来自Artifactory配置阶段,流水线实际是在SonarQube分析阶段执行rtMaven.run package sonar:sonar时,执行单元测试环节失败,核心错误是maven-surefire-plugin 2.18.1版本启动的测试子VM异常终止。

定位步骤
  • 第一步:拉取测试执行的完整日志,在Maven运行参数中加-e -X开启调试,你可以临时修改Sonar阶段的rtMaven.run配置为:rtMaven.run pom: 'pom.xml', goals: 'package sonar:sonar -e -X', buildInfo: buildInfo,重跑流水线后查看surefire生成的测试错误报告,路径一般在target/surefire-reports/下,确认是否有具体的单测崩溃、OOM、JVM版本兼容问题。
  • 第二步:验证JDK和surefire版本兼容性,你当前用的是OpenJDK 11,而maven-surefire-plugin 2.18.1是2014年发布的版本,本身对JDK 9+的兼容性非常差,这是最常见的触发该错误的原因。
  • 第三步:检查Jenkins代理的资源占用,确认执行构建的agent节点在测试运行阶段是否出现内存不足、CPU打满的情况,子VM可能因为资源不足被系统强制Kill。
  • 第四步:检查Jacoco配置兼容性,你当前用的Jacoco 0.8.0版本和OpenJDK 11、旧版surefire的组合也存在已知的兼容问题,可能导致测试VM崩溃。
解决方案

按优先级从高到低尝试:

  • 方案1:升级maven-surefire-plugin到兼容JDK11的版本,推荐升级到3.1.2及以上版本,你可以在项目pom.xml的build/plugins节点中添加如下配置:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.2.2</version>
</plugin>
  • 方案2:禁用测试的VM fork机制,临时验证是否是fork导致的问题,给Maven参数添加-DforkCount=0:
rtMaven.opts = "-Denv=dev -DforkCount=0"

或者在pom的surefire配置中设置<forkCount>0</forkCount>,注意该方案会降低测试执行的隔离性,仅用于验证,不建议长期使用。

  • 方案3:升级Jacoco版本到0.8.8及以上,解决和JDK11的兼容问题。
  • 方案4:调整测试VM的内存参数,给surefire添加jvm配置,比如:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>3.2.2</version>
  <configuration>
    <argLine>-Xmx1G -XX:MaxMetaspaceSize=256M</argLine>
  </configuration>
</plugin>
  • 方案5:如果确认单测不需要在构建阶段运行,可以添加-DskipTests参数跳过测试执行:
rtMaven.run pom: 'pom.xml', goals: 'package sonar:sonar -DskipTests', buildInfo: buildInfo

内容的提问来源于stack exchange,提问作者DevopsinAfrica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:54:02