当 运行 Karma 规格时,CircleCi 随机断开与浏览器的连接
CircleCi randomly disconnects from browser when running Karma specs
我有一个用 Angularjs 编写的大型程序,正在迁移到 Angular 7(即将成为 8)。我们有 9000 多个规范,其中大约 1/4 是 Angular 7. 现在有一段时间,CircleCI 偶尔会导致整个套件失败并显示以下错误消息:
HeadlessChrome 78.0.3904 (Linux 0.0.0) ERROR
Disconnectedreconnect failed before timeout of 2000ms (transport close)
HeadlessChrome 78.0.3904 (Linux 0.0.0): Executed 8962 of 9075 DISCONNECTED (6 mins 29.171 secs / 6 mins 7.538 secs)
error Command failed with exit code 1.
执行的规范有些随机,规范在 8900 和 9050 之间的某个地方失败。
几个星期前,它开始总是在一个分支上失败,迫使 master 分支重新运行 出现了同样的错误。
所有规范都使用类似的构建、相同的 Headless Chrome 版本、相同的测试 运行ner 在本地干净地执行。主要区别在于报告器不同(我们在 CircleCI 上使用点报告器,在本地使用更多摘要)。
我在 CircleCI 的 "knowledge base" 中搜索了 "Disconnect" 和 "Flakiness",但没有可用的结果。 Google 中出现的关于此的大多数搜索结果都来自事物的古代版本...... HeadlessChrome、Karma、Jasmine 等。我尝试过,例如,设置自定义 "HeadlessChrome" 没有沙箱,但无济于事。
这是什么问题?您对如何诊断此问题有什么建议吗?
客户支持已经回复我并通知我我已经用完了一个进程的所有可用内存。目前,Circle Ci 仅允许容器使用最多 4GB 的 RAM,与 Container OS、Angular 和 angularjs 框架一起, Jasmine 和 Karma 库,以及我们所有的生产和测试代码,我们 运行 out of space.
显然,我们在 4GB 内存附近徘徊了一段时间,所以我们遇到了间歇性故障,但我的新 b运行ch 终于把它推了过去。我们努力确保没有内存泄漏,但在某些时候,您的代码太多了。
所以我的解决方案是拆分测试。我们有几个延迟加载的模块,但目前,我们最好的拆分是 Angular 和 angularjs(因为它允许更好的转换设置)。所以在我的 jasmine 配置中,在选择要包含的文件时,我更新了第二行:
_requireContext(require.context('../lib/fixtures', true, /\.js$/););
_requireContext(require.context('./app', true, /\.spec\.[j|t]s$/));
function _requireContext(context: any) {
context.keys().forEach((path: string) => {
try {
context(path);
} catch (err) {
/* tslint:disable */
console.error(`[ERROR] REQUIRING FILE: ${path}`);
console.error(err);
/* tslint:enable */
throw err;
}
});
}
要包含或排除 typescript/javascript 文件,我很高兴。它看起来有点像这样:
_requireContext(require.context('./app', true, /\.spec\.js$/));
对
_requireContext(require.context('./app', true, /\.spec\.ts$/));
它增加了复杂性(现在我基本上有两个测试套件),但它在 CircleCI 上工作得很好,总体上我的规格 运行 也更快。
最后一点 - 我的开发计算机上的问题为零 - 显然我有超过 4GB 的内存,查看你的测试套件在 CircleCI 上使用了多少内存的唯一方法是询问他们直接。您无法在网站上找到此统计数据。
我有一个用 Angularjs 编写的大型程序,正在迁移到 Angular 7(即将成为 8)。我们有 9000 多个规范,其中大约 1/4 是 Angular 7. 现在有一段时间,CircleCI 偶尔会导致整个套件失败并显示以下错误消息:
HeadlessChrome 78.0.3904 (Linux 0.0.0) ERROR
Disconnectedreconnect failed before timeout of 2000ms (transport close)
HeadlessChrome 78.0.3904 (Linux 0.0.0): Executed 8962 of 9075 DISCONNECTED (6 mins 29.171 secs / 6 mins 7.538 secs)
error Command failed with exit code 1.
执行的规范有些随机,规范在 8900 和 9050 之间的某个地方失败。
几个星期前,它开始总是在一个分支上失败,迫使 master 分支重新运行 出现了同样的错误。
所有规范都使用类似的构建、相同的 Headless Chrome 版本、相同的测试 运行ner 在本地干净地执行。主要区别在于报告器不同(我们在 CircleCI 上使用点报告器,在本地使用更多摘要)。
我在 CircleCI 的 "knowledge base" 中搜索了 "Disconnect" 和 "Flakiness",但没有可用的结果。 Google 中出现的关于此的大多数搜索结果都来自事物的古代版本...... HeadlessChrome、Karma、Jasmine 等。我尝试过,例如,设置自定义 "HeadlessChrome" 没有沙箱,但无济于事。
这是什么问题?您对如何诊断此问题有什么建议吗?
客户支持已经回复我并通知我我已经用完了一个进程的所有可用内存。目前,Circle Ci 仅允许容器使用最多 4GB 的 RAM,与 Container OS、Angular 和 angularjs 框架一起, Jasmine 和 Karma 库,以及我们所有的生产和测试代码,我们 运行 out of space.
显然,我们在 4GB 内存附近徘徊了一段时间,所以我们遇到了间歇性故障,但我的新 b运行ch 终于把它推了过去。我们努力确保没有内存泄漏,但在某些时候,您的代码太多了。
所以我的解决方案是拆分测试。我们有几个延迟加载的模块,但目前,我们最好的拆分是 Angular 和 angularjs(因为它允许更好的转换设置)。所以在我的 jasmine 配置中,在选择要包含的文件时,我更新了第二行:
_requireContext(require.context('../lib/fixtures', true, /\.js$/););
_requireContext(require.context('./app', true, /\.spec\.[j|t]s$/));
function _requireContext(context: any) {
context.keys().forEach((path: string) => {
try {
context(path);
} catch (err) {
/* tslint:disable */
console.error(`[ERROR] REQUIRING FILE: ${path}`);
console.error(err);
/* tslint:enable */
throw err;
}
});
}
要包含或排除 typescript/javascript 文件,我很高兴。它看起来有点像这样:
_requireContext(require.context('./app', true, /\.spec\.js$/));
对
_requireContext(require.context('./app', true, /\.spec\.ts$/));
它增加了复杂性(现在我基本上有两个测试套件),但它在 CircleCI 上工作得很好,总体上我的规格 运行 也更快。
最后一点 - 我的开发计算机上的问题为零 - 显然我有超过 4GB 的内存,查看你的测试套件在 CircleCI 上使用了多少内存的唯一方法是询问他们直接。您无法在网站上找到此统计数据。