Testcontainers hanging when using docker-compose on gitlab-ci

Viewed 813

I've used testcontainers on gitlab before(Rabbitmq container) but now using DockerComposeContainer. However we consistently see it hang here:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.5.RELEASE)

2020-03-02 11:02:25.555  INFO 202 --- [           main] c.r.g.r.config.TestContextConfiguration  : Starting TestContextConfiguration on runner-0277ea0f-project-17096135-concurrent-0 with PID 202 (started by root in /builds/playsafe/roxor/reference-wallet-automated-tests)
2020-03-02 11:02:25.563  INFO 202 --- [           main] c.r.g.r.config.TestContextConfiguration  : The following profiles are active: dev
2020-03-02 11:02:29.047  INFO 202 --- [           main] c.r.g.r.config.TestContextConfiguration  : Started TestContextConfiguration in 4.11 seconds (JVM running for 8.894)
2020-03-02 11:02:30.834  INFO 202 --- [           main] tAndSystemPropertyClientProviderStrategy : Found docker client settings from environment
2020-03-02 11:02:30.836  INFO 202 --- [           main] o.t.d.DockerClientProviderStrategy       : Found Docker environment with Environment variables, system properties and defaults. Resolved dockerHost=tcp://docker:2375
2020-03-02 11:02:31.251  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : Docker host IP address is docker
2020-03-02 11:02:31.297  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : Connected to docker: 
  Server Version: 19.03.6
  API Version: 1.40
  Operating System: Alpine Linux v3.11 (containerized)
  Total Memory: 3693 MB
2020-03-02 11:02:31.782  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Starting to pull image
2020-03-02 11:02:31.857  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
2020-03-02 11:02:32.085  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  2 pending,  1 downloaded,  0 extracted, (358 KB/? MB)
2020-03-02 11:02:32.150  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  1 pending,  2 downloaded,  0 extracted, (1 MB/? MB)
2020-03-02 11:02:32.188  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  0 extracted, (1 MB/4 MB)
2020-03-02 11:02:32.410  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  1 extracted, (3 MB/4 MB)
2020-03-02 11:02:32.559  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  2 extracted, (3 MB/4 MB)
2020-03-02 11:02:32.682  INFO 202 --- [tream-145510702] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  3 extracted, (4 MB/4 MB)
2020-03-02 11:02:34.504  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
2020-03-02 11:02:34.508  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : Checking the system...
2020-03-02 11:02:34.511  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : ✔︎ Docker server version should be at least 1.6.0
2020-03-02 11:02:34.692  INFO 202 --- [           main] org.testcontainers.DockerClientFactory   : ✔︎ Docker environment should have more than 2GB free disk space
2020-03-02 11:02:35.137  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Starting to pull image
2020-03-02 11:02:35.153  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
2020-03-02 11:02:35.436  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  2 pending,  1 downloaded,  0 extracted, (540 KB/? MB)
2020-03-02 11:02:35.537  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  1 pending,  2 downloaded,  0 extracted, (8 MB/? MB)
2020-03-02 11:02:36.949  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  0 extracted, (206 MB/215 MB)
2020-03-02 11:02:37.115  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  1 extracted, (206 MB/215 MB)
2020-03-02 11:02:45.442  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  2 extracted, (213 MB/215 MB)
2020-03-02 11:02:45.576  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  3 downloaded,  3 extracted, (215 MB/215 MB)
2020-03-02 11:02:45.589  INFO 202 --- [tream-611181438] org.testcontainers.DockerClientFactory   : Pull complete. 3 layers, pulled in 10s (downloaded 215 MB at 21 MB/s)
2020-03-02 11:02:45.637  INFO 202 --- [           main]  [docker/compose:1.24.1]               : Pulling docker image: docker/compose:1.24.1. Please be patient; this may take some time but only needs to be done once.
2020-03-02 11:02:45.908  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Starting to pull image
2020-03-02 11:02:45.913  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
2020-03-02 11:02:46.298  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  3 pending,  1 downloaded,  0 extracted, (5 MB/? MB)
2020-03-02 11:02:46.327  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  2 pending,  2 downloaded,  0 extracted, (5 MB/? MB)
2020-03-02 11:02:46.402  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  1 pending,  3 downloaded,  0 extracted, (8 MB/? MB)
2020-03-02 11:02:46.613  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  1 pending,  3 downloaded,  1 extracted, (11 MB/? MB)
2020-03-02 11:02:46.800  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  0 pending,  4 downloaded,  1 extracted, (23 MB/32 MB)
2020-03-02 11:02:47.041  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  0 pending,  4 downloaded,  2 extracted, (23 MB/32 MB)
2020-03-02 11:02:47.766  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  0 pending,  4 downloaded,  3 extracted, (30 MB/32 MB)
2020-03-02 11:02:48.015  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pulling image layers:  0 pending,  4 downloaded,  4 extracted, (32 MB/32 MB)
2020-03-02 11:02:48.028  INFO 202 --- [tream-860567853]  [docker/compose:1.24.1]               : Pull complete. 4 layers, pulled in 2s (downloaded 32 MB at 16 MB/s)
2020-03-02 11:02:48.052  INFO 202 --- [           main]  [docker/compose:1.24.1]               : Creating container for image: docker/compose:1.24.1
2020-03-02 11:02:48.338  INFO 202 --- [ream-2098356355] org.testcontainers.DockerClientFactory   : Starting to pull image
2020-03-02 11:02:48.339  INFO 202 --- [ream-2098356355] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
2020-03-02 11:02:48.693  INFO 202 --- [ream-2098356355] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  1 downloaded,  0 extracted, (1 MB/1 MB)
2020-03-02 11:02:48.880  INFO 202 --- [ream-2098356355] org.testcontainers.DockerClientFactory   : Pulling image layers:  0 pending,  1 downloaded,  1 extracted, (1 MB/1 MB)

It will sit there for an hour before the gitlab runner timesout.

I have the following in my .gitlab-ci.yml:

  variables:
    MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
    MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  image: registry.gitlab.com/mycompany/gitlab-ci:0.0.15
  cache:
    paths:
      - .m2/repository
  stages:
    - build
  services:
    - docker:dind
  build_images_and_run:
    stage: build
    script:
      - git clone https://$MOCK_RGP_REPO_USERNAME1:$MOCK_RGP_REPO_PASSWORD1@gitlab.com/pmycompany/monorepo-java.git
      - cd roxor-monorepo-java
      - git checkout $MONO_REPO_COMMIT_SHA
      - docker login -u $RGP_DEVOPS_USERNAME -p $RGP_DEVOPS_PASSWORD registry.gitlab.com/pmycompany/devops
      - echo 'Building docker containers to run regression against'
      - mvn clean install -Pdocker -q -DskipTests
      - cd ../
      - echo 'Running regression suite'
      - mvn $MAVEN_CLI_OPTS verify

Spring test:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ReferenceWalletAutomatedTestsApplication.class, loader = SpringBootContextLoader.class)
@Slf4j
public class TestContextConfiguration {

    @ClassRule
    public static DockerComposeContainer environment = new DockerComposeContainer(new File("src/main/resources/docker/docker.compose.yml"))
            .withEnv(referenceWalletEnvironmentProperties())
            .withExposedService("wallet-server-discovery_1", 8761)
            .withExposedService("wallet-server-config_1", 8888)
            .withExposedService("wallet-service-rgp_1", 9080)
            .withExposedService("db_1", 8082)
            .waitingFor("wallet-service-rgp_1", forHttp("/actuator/health")
                    .forStatusCode(200)
                    .forPort(9080)
                    .withStartupTimeout(Duration.ofSeconds(240)));

    private static Map<String, String> referenceWalletEnvironmentProperties() {
        final Map<String, String> containerEnv = new HashMap<>();
        containerEnv.put("SPRING_CLOUD_CONFIG_URI", "http://wallet-server-config:8888");
        containerEnv.put("SPRING_PROFILES_ACTIVE", "dev");

        return containerEnv;
    }

    @Before
    public void testSetup() {
        environment.start();
        log.info("Test containers started successfully");
        log.info("TO remove");
    }

    @After
    public void testCleanUp() {
        environment.stop();
        log.info("Stopped test containers");
    }
}

Has anyone seen this behaviour using docker-compose from test containers? Have I missed something in the configuration for the DockerComposeContainer in the unit test?

0 Answers
Related