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

Java 8迁移至11后Jenkins中Flapdoodle Embedded Mongo运行失败求助

问题分析与解决方案

从错误日志来看,核心问题是Flapdoodle下载了Ubuntu 20.04版本的MongoDB二进制包,但你的Jenkins Linux服务器系统(大概率是CentOS/RHEL等旧版本发行版,或glibc版本过低)与该包不兼容,导致启动mongod时出现依赖库缺失、符号找不到等错误。

解决方案

1. 检查服务器系统与glibc版本

先确认Jenkins服务器的系统信息和glibc版本:

# 查看系统发行版
cat /etc/os-release
# 查看glibc版本
ldd --version

Ubuntu 20.04要求glibc 2.28及以上,如果你的服务器glibc版本低于这个值,就会出现__snprintf_chk、__memcpy_chk等符号找不到的问题。

2. 强制指定兼容的MongoDB版本或系统包

修改Flapdoodle配置,指定一个与服务器系统兼容的MongoDB版本(比如4.0.x系列,对glibc要求更低),或者直接指定对应发行版的包:

示例1:指定低版本MongoDB

import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.distribution.Version;
import de.flapdoodle.embed.process.runtime.Network;

// 在测试类的配置中设置
MongodConfig mongodConfig = MongodConfig.builder()
    .version(Version.V4_0_27) // 选择兼容旧glibc的MongoDB版本
    .net(new Net("localhost", Network.freeServerPort(), false))
    .build();

示例2:指定对应发行版的包(比如CentOS 7)

import de.flapdoodle.embed.mongo.packageresolver.Command;
import de.flapdoodle.embed.mongo.packageresolver.PackageResolver;
import de.flapdoodle.embed.mongo.packageresolver.linux.LinuxPlatform;
import de.flapdoodle.embed.process.distribution.Architecture;
import de.flapdoodle.embed.process.distribution.OperatingSystem;
import de.flapdoodle.embed.mongo.distribution.Version;

PackageResolver customResolver = PackageResolver.builder()
    .forCommand(Command.MongoD)
    .put(
        LinuxPlatform.builder()
            .operatingSystem(OperatingSystem.Linux)
            .architecture(Architecture.X86_64)
            .version("CentOS_7")
            .build(),
        Version.V4_4_17,
        "mongodb-linux-x86_64-rhel70-4.4.17.tgz"
    )
    .build();

// 将customResolver配置到Flapdoodle的MongoDB工厂中

3. 安装缺失的系统依赖库

如果服务器缺少libresolv.so.2等基础库,执行对应系统的安装命令:

  • Debian/Ubuntu系统:
apt-get update && apt-get install -y libc6
  • CentOS/RHEL系统:
yum install -y glibc

如果Jenkins运行在Docker容器中,需要修改Dockerfile,在构建阶段添加上述安装命令。

4. 清理Flapdoodle缓存

删除Jenkins服务器上的Flapdoodle缓存目录,让它重新下载兼容的包:

rm -rf /root/.embedmongo/linux

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:53