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

Spring Boot2中de.flapdoodle.embed.mongo在GitLab CI运行失败如何解决?

问题解决方案

该报错的核心原因是de.flapdoodle.embed.mongo组件无法在GitLab CI的运行环境中正常启动嵌入式MongoDB进程,本地环境拥有完整的系统依赖、网络权限和资源配额,而CI Runner通常使用精简容器镜像,存在依赖缺失、网络受限、资源不足等问题,可按以下方案逐一排查解决:

  • 补充CI镜像的系统依赖
    多数GitLab CI默认使用的精简OpenJDK镜像缺少MongoDB运行必需的依赖库,可在gitlab-ci.yml的安装步骤补充依赖:

    before_script:
      - apt-get update && apt-get install -y libssl1.1 libcurl4
    

    若使用Debian 12等新版本镜像找不到libssl1.1,可替换为libssl3,同时指定嵌入式MongoDB使用4.4+以上兼容新版SSL库的版本。

  • 配置嵌入式MongoDB的下载规则
    默认组件会从MongoDB官方地址下载二进制包,CI环境可能存在网络连通问题导致下载失败,可在测试配置文件application-test.properties中指定版本和国内镜像源:

    # 指定兼容的MongoDB版本,避免拉取最新不兼容版本
    spring.mongodb.embedded.version=4.4.18
    # 配置国内镜像源,解决外网下载慢/失败问题
    de.flapdoodle.mongodb.embedded.download.url=https://mirrors.huaweicloud.com/mongodb/
    

    若CI镜像中已提前预装MongoDB,可直接关闭自动下载:

    de.flapdoodle.mongodb.embedded.download.enabled=false
    
  • 解决端口和权限问题
    CI环境默认27017端口可能被占用,可配置使用随机端口启动:

    # 0代表自动分配未被占用的随机端口
    spring.mongodb.embedded.port=0
    

    另外flapdoodle默认会将二进制文件下载到/tmp目录运行,可提前给目录加执行权限:

    chmod -R 777 /tmp
    
  • 优化测试资源占用
    多个@DataMongoTest测试类会重复启动Spring上下文和MongoDB进程,容易超出CI的内存配额导致进程启动失败,可在测试类上添加注解复用上下文:

    @TestInstance(TestInstance.Lifecycle.PER_CLASS)
    @DataMongoTest
    public class DepositRepositoryTest {
        // 原有测试逻辑保持不变
    }
    

    也可以在build.gradle中调整测试JVM的内存上限:

    test {
        jvmArgs '-Xmx2g', '-Xms1g'
    }
    
  • 替代方案:使用Testcontainers启动MongoDB
    若以上方案都无法解决,可替换嵌入式MongoDB为Testcontainers启动的MongoDB容器,只要GitLab Runner开启Docker in Docker权限即可正常运行,兼容性更强,不存在系统依赖缺失问题。


内容的提问来源于stack exchange,提问作者José Mendes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:09:03