如何告诉docker-maven-plugin
等待 RabbitMQ 容器完全启动后再运行集成测试?
这是我在pom.xml
中使用的插件配置:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<executions>
<execution>
<id>start-rabbitmq-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<images>
<image>
<alias>rabbitmq</alias>
<name>rabbitmq:3.6.10-management</name>
<run>
<log>
<prefix>RABBITMQ</prefix>
<color>cyan</color>
</log>
<namingStrategy>alias</namingStrategy>
<ports>
<port>5672:5672</port>
<port>15672:15672</port>
</ports>
</run>
</image>
</images>
</configuration>
</execution>
<execution>
<id>stop-rabbitmq-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
目前,IT开始执行,而RabbitMQ仍在初始化并失败,因为服务器不可用。
"在启动容器时,是否可以阻止执行,直到满足某些条件">
https://dmp.fabric8.io/#start-wait
您可以使用log
wait
RabbitMQ 容器的一些日志输出:
Regular expression which is applied against the log output of an container and blocks until the pattern is matched. You can use (?s) in the pattern to switch on multi line matching.
我设法找到了一种更自信的方式来检查 RabbitMQ 的状态。当我使用rabbitmq:3.6.10-management
docker 映像时,我可以检查localhost:15672
上的管理 url 是否已启动:
<wait>
<http>
<url>http://localhost:15672</url>
<method>GET</method>
<status>200..399</status>
</http>
<time>10000</time>
</wait>
wait
配置将检查获取管理 url 的返回值,最长为 10 秒,直到它在指定的 HTTP 响应状态范围内,但 RabbitMQ 通常会在 2 到 3 秒内启动。