#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))