嵌入mongodb的gitlab管道

时间:2018-03-26 13:18:13

标签: mongodb gitlab gitlab-ci

我正在尝试为使用嵌入式mongo实例的gradle java应用程序构建管道。我已经构建了一个容器,其中包含java和mongo。但是,对于需要嵌入式mongo实例的所有测试,我一直收到以下错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embeddedMongoServer' 
defined in class path resource [org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.class]: 
Invocation of init method failed; nested exception is java.io.IOException: 
Cannot run program "/tmp/extract-f816c11c-614b-46d7-ad29-68923ca9d624extractmongod": error=2, No such file or directory

我的gitlab-ci.yml看起来像这样:

image: java:latest
services:
  - docker:dind

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  DOCKER_DRIVER: overlay
  SPRING_PROFILES_ACTIVE: gitlab-ci

stages:
  - build
  - test

build:
  stage: build
  script: ./gradlew --build-cache assemble
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: push
    paths:
      - build
      - .gradle

test:
  stage: test
  image: registry.gitlab.com/path/to/explorer-ci:1.0.0
  script: ./gradlew check --debug
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: pull
    paths:
      - build
      - .gradle

构建作业正常,测试作业失败。我的explorer-ci容器是使用以下Dockerfile

构建的
FROM openjdk:8-jdk-alpine

RUN apk update && \
    apk add --no-cache \
        mongodb \
        bash

VOLUME /data/db
VOLUME log

RUN ["mongod", "--smallfiles", "--fork", "--logpath", "log/mongodb.log"]

我用一堆不同的配置花了一个星期,但似乎无法破解它。请注意,构建/测试在我的本地计算机上运行良好。对我做错了什么想法?

4 个答案:

答案 0 :(得分:2)

在反思时,因为我使用的是嵌入式mongo实例,所以我没有依赖mongodb来构建或测试。我现在使用以下gitlab-ci.yaml,它运行正常。

image: openjdk:8-jdk

variables:
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"
  DOCKER_DRIVER: overlay
  SPRING_PROFILES_ACTIVE: gitlab-ci

stages:
  - build
  - test

build:
  stage: build
  script: ./gradlew --build-cache assemble
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: push
    paths:
      - build
      - .gradle

test:
  stage: test
  script: ./gradlew check
  cache:
    key: "$CI_COMMIT_REF_NAME"
    policy: pull
    paths:
      - build
      - .gradle

答案 1 :(得分:0)

仅更新依赖项即可解决:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>2.2.0</version>
    <scope>test</scope>
</dependency>

答案 2 :(得分:0)

问题出在项目运行者的基本docker映像上,您需要使用jdk版本而不是alpine。

尝试将基本图像更改为此image: openjdk:8-jdk,它将正常工作。

答案 3 :(得分:0)

在我们的案例中,Fladoodle嵌入式MongoDB中针对此问题描述的解决方案有所帮助:

https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo/issues/281

简而言之-在运行测试之前,我们将其添加到了Gitlab脚本中(或者在容器设置本身中进行了此操作):

    apk --no-cache add ca-certificates
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub

wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-bin-2.29-r0.apk

apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk

wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-i18n-2.29-r0.apk
apk add glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8