错误无法连接到 CircleCi 中的 Ryuk

Евг*_*нов 5 java scala circleci testcontainers

CircleCI 的配置。在本地计算机上,当您运行 CircleCI 时,一切都会过去。在这种情况下,服务器出现了很多错误,其中之一就是

java.lang.IllegalStateException: Can not connect to Ryuk

同时,将来在早期启动的容器中连接测试时会出现错误test-containers,我认为这是由于连接到 时出现错误Ryuk。令人困惑的是,在本地计算机上一切正常,而在服务器上一切正常。

Yay*_*tay 3

问题的原因在这里:https://gist.github.com/OlegGorj/52ca84624503a5e85624c6eb38df4590 \n其中说:\n环境分离作业和远程docker在不同的环境中运行。因此,Docker容器无法直接与远程docker中运行的容器进行通信。

\n

访问服务 在远程 docker 中启动服务并直接从主容器 ping 服务是不可能的(反之亦然)。

\n

似乎有三个选项:

\n
    \n
  1. 在另一个远程 Docker 容器中完成整个构建。
  2. \n
  3. 使用专用虚拟机进行构建(https://www.testcontainers.org/supported_docker_environment/continuous_integration/circle_ci/
  4. \n
  5. 如果您可以在一开始就创建测试容器,那么就这样做,并且不要在circleci中使用testcontainers(https://circleci.com/docs/2.0/executor-types/#using-multiple-docker-images)。请记住,每个测试用例都将与服务的同一实例交互。
  6. \n
\n

有关选项 3 的更多详细信息

\n

基本上,在使用circleci时不要使用testcontainers(一个词)。\n在你的circleci/config.yaml中执行如下操作:

\n
    jobs:\n      build:\n          docker:        \n            - image: circleci/openjdk:14.0.1-jdk-buster\n            - image: rabbitmq:3.8-alpine\n          environment:\n
Run Code Online (Sandbox Code Playgroud)\n

因此,circleci 在与映像相同的主机上运行兔子容器。\n然后,您可以在本地主机上打开的任何端口上与它进行通信,并且在构建(始终位于第一个容器中)完成时,circleci 将关闭这些辅助容器。

\n

这样做有一些缺点:

\n
    \n
  • testcontainers 允许您启动和停止容器,这种方法不能,因此您从根本上无法测试容器的重新启动。
  • \n
  • 所有测试都将在同一个实例上运行,因此,在兔子实例中,每个测试都应使用唯一的交换和队列。
  • \n
  • 如果像我一样,您需要在 Circleci 和桌面(以及 Jenkins)中构建,那么您需要在测试中使用 Circleci 条件逻辑(只需检查 System.getenv("CIRCLECI"))来确定采用哪种方法。
  • \n
\n