在 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 中运行声纳扫描仪

使用 gitlab-ci.yml 的 Docker 内部的 Docker

在 GitLab-ci Docker build 中执行外部 bash 脚本

在 .gitlab-ci.yml 中运行 docker-compose build

如何将存储库中的文件复制到用于作业的 Docker 容器中,在 gitlab-ci.yml

gitlab-ci.yaml:在多行 python docker 镜像中运行 python