Jenkins + TestContainers + Spring Boot + Couchbase - сбой сборки maven из-за таймаута БД - PullRequest
0 голосов
/ 27 мая 2019

У нас есть проект Spring Boot 2.0.4, который обращается к БД Couchbase.

В нашем коде у нас есть 2 последовательных Spring Data запроса:

dogsRepository.findBy(...);
catsRepository.findBy(...);

При нормальном запуске программы все работает нормально и код работает как положено.

Ошибка: У нас есть проблема, которая возникает только на этапе Интеграционные тесты и только на сервере Jenkins:

В интеграционных тестах TestContainers используется для ускорения контейнера couchbase.

Произошла ошибка тайм-аута при вызове второго findBy(...):

java.lang.RuntimeException: java.util.concurrent.TimeoutException
at com.couchbase.client.core.utils.Blocking.blockForSingle(Blocking.java:74)
at com.couchbase.client.java.CouchbaseCluster.disconnect(CouchbaseCluster.java:422)
at com.couchbase.client.java.CouchbaseCluster.disconnect(CouchbaseCluster.java:417)
at org.testcontainers.couchbase.CouchbaseContainer.stopCluster(CouchbaseContainer.java:188)
at org.testcontainers.couchbase.CouchbaseContainer.stop(CouchbaseContainer.java:183)
at org.testcontainers.containers.GenericContainer.finished(GenericContainer.java:760)
at org.testcontainers.containers.FailureDetectingExternalResource$1.evaluate(FailureDetectingExternalResource.java:36)
at org.testcontainers.containers.FailureDetectingExternalResource$1.evaluate(FailureDetectingExternalResource.java:30)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.util.concurrent.TimeoutException

Некоторые из вещей, которые мы пробовали :

  • мы заменили порядок обращений к репозиториям - получили тот же результат: Тайм-аут при втором вызове (как будто второй ответ / запрос БД уходит в черную дыру)

  • Пытался обновить количество потоков в maven: clean install -T 1C

  • Пробовал запускать интеграционные тесты через maven на машине с Windows и Linux - работает отлично и тесты проходят.
...