Проблема при выполнении задания конвейера Gitlab CI, выполняющего интеграционный тест с Testcontainers

#spring-boot #docker #gitlab-ci #testcontainers

# #весенняя загрузка #docker #gitlab-ci #testcontainers

Вопрос:

У меня есть тест приложения Spring Boot, в котором использовались TestContainers (https://www.testcontainers.org ) для запуска некоторых интеграционных тестов с KafkaContainer. При локальном запуске все в порядке, но при запуске интеграционного теста внутри конвейера GitlabCI контейнер не может запуститься. Здесь журнал заданий:

 > org.testcontainers.containers.ContainerLaunchException: Container
> startup failed Caused by:
> org.rnorth.ducttape.RetryCountExceededException: Retry limit hit with
> exception Caused by:
> org.testcontainers.containers.ContainerLaunchException: Could not
> create/start container Caused by:
> org.testcontainers.containers.ContainerLaunchException: Timed out
> waiting for container port to open (docker ports: [32776, 32778]
> should be listening)
 

Здесь Gitlab CI conf:

 image: docker:git
services:
  - docker:dind

stages:
  - test
  - push
  - deploy

variables:
  MAVEN_CLI_OPTS: "--batch-mode -Dmaven.repo.local=/.m2"
  DOCKER_HOST: "tcp://docker:2375"
  DOCKER_DRIVER: overlay2

.test_template: amp;java_test
  image: maven:3.5.3-jdk-8
  stage: test
  tags:
    - test

 myapp-api_test:
   <<: *java_test
   services:
     - docker:dind
   variables:
     DOCKER_HOST: "tcp://docker:2375"
     DOCKER_DRIVER: overlay2
   script:
    - cd myapp-api
    - mvn $MAVEN_CLI_OPTS package
 

Здесь Runner conf:

 executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/.m2", 
         "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
    output_limit = 8192
 

Любая помощь?
Спасибо

Ответ №1:

Я знаю, что вы, вероятно, уже поняли это, но даю вам ответ для дальнейшего использования на случай, если другие столкнутся с такой же проблемой.

У меня были похожие проблемы, и я исправил это, добавив пользовательскую стратегию ожидания и / или пользовательский тайм-аут для моих контейнеров. Локально на моей машине это будет работать нормально, но на более медленном gitlab.com общие бегуны, это приведет к тайм-ауту

 Wait.forHttp("/health").withStartupTimeout(Duration.ofMinutes(5L))