我正在使用TestContainers(本地堆栈Module)[https://www.testcontainers.org/modules/localstack/])进行与Spring Boot的高级集成测试,用来自本地堆栈的客户端取代AmazonS3客户端。我已经大致设置了我的集成测试如下(仅相关部分):
// FurnitureDetailsControllerIT.kt
@Testcontainers
@SpringBootTest
@ExtendWith(SpringExtension::class)
@AutoConfigureMockMvc
@DirtiesContext
class FurnitureDetailsControllerIT {
@Autowired
private val amazonS3: AmazonS3? = null
companion object {
@Container
var localStack: LocalStackContainer =
LocalStackContainer(DockerImageName.parse("localstack/localstack:latest")).withServices(LocalStackContainer.Service.S3)
@JvmStatic
@DynamicPropertySource
fun properties(registry: DynamicPropertyRegistry) {
registry.add("cloud.aws.s3.endpoint") { localStack.getEndpointOverride(LocalStackContainer.Service.S3) }
registry.add("cloud.aws.credentials.access-key") { localStack.accessKey }
registry.add("cloud.aws.credentials.secret-key") { localStack.secretKey }
}
}
(...)
}
在本地运行集成测试时,一切运行正常(从我的IDE或使用Maven的命令行),这意味着我可以看到本地堆栈容器在日志中旋转:
13:54:16.360 [main] INFO 🐳 [remote-docker.artifactory.mycompany.com/localstack/localstack:0.13.0] - Container remote-docker.artifactory.mycompany.com/localstack/localstack:0.13.0 started in PT4.6099665S
但是,在Jenkins上运行时,构建会因为一条错误消息而失败。
2022-09-28 14:27:19.971 INFO 1185 --- [ main] ?.a.s.com/localstack/localstack:latest] : Container remote-docker.artifactory.mycompany.com/localstack/localstack:latest is starting: ec383bda85f2636c3bef3f6b3938ac169636e4542244e3067b5184b6b03a6e35
2022-09-28 14:28:20.612 ERROR 1185 --- [ main] ?.a.s.com/localstack/localstack:latest] : Could not start container
org.testcontainers.containers.ContainerLaunchException: Timed out waiting for log output matching '.*Ready.
我猜这与本地堆栈所需的临时目录有关。当在我的Windows机器上运行时,我必须在测试恢复之前手动点击“Share It”:
我想,由于在Jenkins上的测试失败(因为我不能在那里点击“共享它”),启动容器最终会超时,测试将失败。
我读到您可以使用TMPDIR
环境变量配置目录,如https://docs.localstack.cloud/localstack/configuration/中所述。但不建议使用该变量。将临时目录设置为Jenkins工作目录而不必明确同意共享该目录的最佳方法是什么?
注意:我已经成功地使用了TestContainers的MongoBD module,它启动了一个停靠的MongoDB示例。这可以完美地工作,所以我不确定这是Testtainers的问题还是LocalStack的问题。
1条答案
按热度按时间d5vmydt91#
事实证明,这毕竟是公司委托书的问题。出于某种原因,LocalStack需要在运行时下载依赖项:
来自https://docs.localstack.cloud/localstack/configuration/:
OUTBOUND_HTTP_PROXY:用于下载运行时依赖项和LocalStack外部连接的HTTP代理
由于我们的Jenkins位于公司代理之后,我必须设置以下环境变量:
SKIP_SSL_CERT_DOWNLOAD
、OUTBOUND_HTTP_PROXY
、OUTBOUND_HTTPS_PROXY
。最重要的是,我必须将版本硬编码为1.1.0
,而不是使用latest
标记。因此,我的代码现在如下所示: