【问题标题】:Jenkins can't connect to a database during a unit test after a buildJenkins 在构建后的单元测试期间无法连接到数据库
【发布时间】:2011-12-07 18:45:50
【问题描述】:

我正在将我的 ant 构建移动到新的 Jenkins 服务器。它可以访问SVN,编译等等。一切都很好,直到它开始运行单元测试。一些测试需要访问数据库才能执行。

我已经登录到运行 Jenkins 的服务器,通过在数据库端口上使用 telnet,我可以知道路径是打开的。 (IT 人员也说路径是开放的)。我知道这是一个数据库问题,因为当我弄乱配置文件时,我可以在本地重现该问题,因此构建无法找到数据库。

我的问题是这个。我真的需要 Jenkins 告诉我为什么它无法连接到数据库。我一直无法弄清楚如何做到这一点。控制台输出只是显示它一直在尝试测试。任何和所有建议都表示赞赏。

【问题讨论】:

  • 究竟是什么试图访问数据库?如果是单元测试,为什么不能在其中添加一些日志记录?当您在本地机器上运行测试时会发生什么(通过 Jenkins,您可以在本地安装它)?
  • 您提出了两个非常好的观点。让我看看那些。

标签: database ant junit hudson jenkins


【解决方案1】:

您是否将数据库参数从 Ant 传递到 junit 目标?如果是这样,请将-v 参数添加到您的 jenkins 配置中的 ant 构建步骤中以获取额外的日志记录,从而查看正在设置的数据库参数。

或者,您的测试是否会自行加载数据库参数?根据它们的阅读方式,您可能遇到类路径或路径问题。在这种情况下,请在测试中记录路径、类路径和任何其他相关变量。

请记住,junit 任务有一个 timeout 参数,如果您不希望它永远挂起,您可以设置它。

最后,您可以登录到 jenkins 主机并从正在执行的测试中触发线程转储。这是通过向 java 进程(在 *nix 上)发送 kill -3 信号来完成的,或者,如果您在 Windows 上运行 jenkins 并且您的 JVM 不是太旧,您可以执行 jstack。生成的堆栈跟踪(应该出现在 Jenkins 构建日志中)可能会带来一些见解。

【讨论】:

  • 我接受这个答案,因为它有很多很好的调试技术。我的问题其实很简单。配置文件需要一个完全限定的域名,因为 Jenkins 服务器移动到数据库不再位于同一网络上的新环境中。对于不同的环境,我们有不同的配置文件,而我第一次编辑了错误的配置文件,这就是为什么我要在这里发布的原因。一旦我编辑了正确的文件,它就可以完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 2012-01-17
相关资源
最近更新 更多