在 Gitlab-ci 中使用带有 docker-compose 的 Testcontainers 运行端到端测试
Posted
技术标签:
【中文标题】在 Gitlab-ci 中使用带有 docker-compose 的 Testcontainers 运行端到端测试【英文标题】:Running end to end tests with Testcontainers with docker-compose inside Gitlab-ci 【发布时间】:2021-08-19 19:10:47 【问题描述】:我们已经使用 Testcontainers 编写了端到端测试。使用以下 Testcontainers 方法加载 docker-compose 文件:
@Container
public static final DockerComposeContainer<?> COMPOSE_CONTAINER =
new DockerComposeContainer<>(new File("src/test/resources/docker-compose-test.yml"))
.withLocalCompose(true)
.withExposedService(ZOOKEEPER_SERVICE, ZOOKEEPER_PORT)
.withExposedService(BROKER_SERVICE, BROKER_PORT)
.withExposedService(BROKER_SERVICE, BROKER_PORT_LOCALHOST)
.withExposedService(SCHEMA_REGISTRY_SERVICE, SCHEMA_REGISTRY_PORT)
.withExposedService(VAULT_SERVICE, VAULT_PORT)
.withExposedService(ELASTICSEARCH_SERVICE, ELASTICSEARCH_PORT_1)
.withExposedService(ELASTICSEARCH_SERVICE, ELASTICSEARCH_PORT_2)
.waitingFor(ELASTICSEARCH_SERVICE, Wait.forHttp("/").forStatusCode(200))
.waitingFor(VAULT_SERVICE, Wait.forHttp("/").forStatusCode(200))
.waitingFor(SCHEMA_REGISTRY_SERVICE, Wait.forHttp("/subjects").forStatusCode(200));
它在本地工作,但在我们的 Gitlab-CI 测试阶段失败。我们尝试将 docker-compose 添加到舞台,但它仍然不起作用。测试阶段编写如下:
test:
stage: test
services:
- docker:dind
script:
- apk add --no-cache docker-compose
- docker-compose --version
- mvn clean test -Djavax.net.ssl.trustStore=$CI_PROJECT_DIR/src/main/resources/cacerts -Djavax.net.ssl.trustStorePassword=$TRURST_STORE_PWD
artifacts:
reports:
junit: ./target/surefire-reports/*.xml
管道中的错误是:
Time elapsed: 101.927 s <<< ERROR!
org.testcontainers.containers.ContainerLaunchException: Local Docker Compose not found. Is docker-compose on the PATH?
我希望有人已经设置了类似的东西并会帮助我们:)
最好的问候。
【问题讨论】:
您是否查看了有关在 Gitlab CI 中使用 Testcontainers 的官方文档? testcontainers.org/supported_docker_environment/… 【参考方案1】:可能是因为您不能只使用 docker:dind,因为那是 docker 中的 docker,您需要 dcind,它是 docker 中的 docker compose。我不确定您是否可以尝试 docker:dcind 或者是否有另一个 dcind 图像您可以尝试在 docker hub 上。
【讨论】:
以上是关于在 Gitlab-ci 中使用带有 docker-compose 的 Testcontainers 运行端到端测试的主要内容,如果未能解决你的问题,请参考以下文章
使用 gitlab-ci.yml 的 Docker 内部的 Docker
在 GitLab-ci Docker build 中执行外部 bash 脚本
在 .gitlab-ci.yml 中运行 docker-compose build