我在Node.js的一个学校项目上工作,为此我们(我的队友和我自己)添加了一系列由Ruby脚本运行的集成测试。如标题中所提到的,我们使用Travis在每次推送时运行此测试。
我们正在开发一个分散的应用程序,要求我们启动3台服务器来运行我们的测试。为此,我们在一个线程中启动每个服务器,一旦所有服务器都启动,我们在三个线程之一(服务器的一个线程)中运行测试(使用Postman' newman
CLI)是开始时间最长的。)
运行测试后退出脚本意味着停止服务器并退出其线程。为此,我将杀死每个服务器的进程并退出所有线程,以运行测试的线程结束。
不幸的是,同一个线程总是无法退出,导致Travis构建超时并进入errored
状态。这很奇怪,因为它在我的笔记本电脑上运行良好。
可以在GitHub上找到Ruby脚本:https://github.com/JosephCaillet/vinimay/blob/friends/run_tests.rb
为什么Travis未能退出我的线程,我该如何解决?
更新
为了澄清初始帖子中一些不清楚的部分,这里是Ruby脚本中线程的生命周期:
thr.join
时,脚本会监视每个服务器的输出,等待包含"运行于"的服务器的字符串。在stdout中输出(因此它知道服务器何时实际运行)。每次找到此字符串时,计数器都会递增。exit
,除了正在运行测试的线程,现在正在退出线程(因为我们不能让这个线程退出其他线程,否则它会让它们处于永久运行状态,脚本永远不会结束。)exit
并结束。这是特拉维斯似乎遇到麻烦的第五步。