如何使用 spring boot 集成测试(java)在 Azure devops 中运行 Azure cosmos DB 模拟器?
目前cosmos DB模拟器仅支持Windows server不支持linux?
有什么建议如何继续吗?
更新:1 对于 Windows 构建代理,可以使用来自 azure pipelines 的以下任务。
- task: CosmosDbEmulator@2
inputs:
containerName: 'azure-cosmosdb-emulator'
enableAPI: 'SQL'
portMapping: '8081:8081, 8901:8901, 8902:8902, 8979:8979, 10250:10250, 10251:10251, 10252:10252, 10253:10253, 10254:10254, 10255:10255, 10256:10256, 10350:10350'
hostDirectory: '$(Build.BinariesDirectory)\azure-cosmosdb-emulator'
对于Linux: 我使用的与@Ricardo
相同有针对linux的CosmosDB模拟器的尝试:这里
它们提供了在 Linux 机器上运行它的命令,我们只是将它们放在 bash 步骤中,以便能够在我们的 yaml 管道中运行它:
*睡眠是为了让模拟器有时间在容器内启动
- bash: |
ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"
ifconfig | grep "inet " | grep -Fv 127.0.0.1
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
docker run -p 8081:8081 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254 -m 4g --cpus=2.0 --name=test-linux-emulator -e AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10 -e AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=false -e AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr -d -it mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
sleep 30
curl -k https://localhost:8081/_explorer/emulator.pem > /tmp/emulatorcert.crt
keytool -cacerts -storepass changeit -noprompt -importcert -alias emulator_cert -file /tmp/emulatorcert.crt
displayName: Install CosmosDB Emulator Docker
我写了一篇关于使用 Testcontainers 和 Cosmos DB Docker 模拟器运行 Spring Boot 应用程序集成测试的博客文章。
https://tech.asimio.net/2024/02/28/Cosmos-DB-Spring-Boot-2-Integration-Tests-Testcontainers.html
它还将 Cosmos DB 自签名证书添加到集成测试使用的临时信任库,从而防止使用 keytool 手动将证书添加到信任库。
这是一篇很长的博客文章,在这里放置片段和解释。
代码片段可能会让您开始或完成您的代码片段。
它不涵盖 Azure Devops,但测试使用简单的 Maven 命令运行:
mvn clean verify