c# - Gitlab CI - 测试项目挂在 DbConnection.CreateCommand()
问题描述
我刚开始使用 docker,还想使用 gitlab-ci 进行构建和测试。经过漫长而痛苦的尝试,我终于设法准备好我的图像和 gitlab-ci.yml。我的项目由WebApi、数据库项目和测试项目组成。我当前的流程是(在 gitlab-ci 中使用 docker/compose 和 dind):
- 构建阶段:
- 构建 webapi 并将其加载到容器注册表
- 构建数据库并将其加载到容器注册表(图像 mcr.microsoft.com/mssql/server:2017-latest)
- 测试阶段:
- 在准备测试的 compose 文件上运行 docker-compose:
- 在构建阶段从容器注册表构建中的映像启动数据库容器
- 构建测试项目并启动容器
- docer 在测试容器上执行“dotnet test 'Tests.csproj'”
- 在准备测试的 compose 文件上运行 docker-compose:
一条更重要的信息 - 测试项目正在使用Respawn将数据库重置为集成测试的清理状态。它基本上遍历对象图并在每次测试之前删除数据(也很好地处理关系)。对于 sql server,它使用 SqlConnection(在代码的后期阶段抽象为 DbConnection)连接到数据库。
如果我在本地机器上运行它(手动创建数据库映像,然后从 2a 运行 docker-compose,然后手动运行docker-compose -f Tests/docker-compose.ci.yml -p dockercomposeForTests --no-ansi up -d
),测试运行良好。
然而,从 gitlab.com 来看,Respawn 上挂着测试。它们正好停在 DbConnection.CreateCommand() 上。在这个阶段,在我看来,无论是在我的设置中还是在容器中都存在某种问题,但是在尝试解决这个问题几天之后,我没有更多的想法。
我知道数据库已经启动并且测试正在连接到它。首先,Respawn 正在打开一个工作连接。其次,我还有一个 Hangfire 启动并连接到完全相同的数据库(使用与 Respawn 相同的连接字符串),并且 hangfire 正在报告连接性(起初我遇到了一些问题,但我离开了它,因为它可以帮助我诊断是否连接是有效的并且正在工作;在某些时候我可能会摆脱它,这样它就不会减慢测试速度)。
解决方案
推荐阅读
- java - 乘以 2 矩阵时的打印问题
- android - Intent:通过使用 getApplicationContext() 来实例化 Intent 时避免内存泄漏?
- ios - Swift 和 Wordpress API:Wordpress API 将一些字符转义为 unicode
- arrays - (Vue.js) V 模型数组。运行困难功能
- java - 如何将用户消息和历史记录保存到房间数据库
- angular - 间歇性错误无法匹配任何路由单元测试Angular
- java - 如何在 java 中使用 Iterator 和 MaxHeapPriorityQueue 编写下一个方法
- statistics - 了解食物质地认知问题
- python - 在使用 Python tkinter 和海龟的迷宫游戏中获取“宝藏”(海龟)的坐标
- c++ - 如何检查鼠标是否点击了OpenGL中的多边形?