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?