ChromeHeadless在管道内发生故障,但不是本地故障



我有一个角度应用程序,它正在使用因果报应进行测试。我还使用gitlab ci来自动构建和部署应用程序。

最近,我们想将测试添加到管道中,使用我们自己的chrome图像。

在管道中运行它会产生一个与无法连接到chrome进程有关的错误:

31 12 2018 10:58:36.116:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9877/
31 12 2018 10:58:36.121:INFO [launcher]: Launching browser ChromeKarma with unlimited concurrency
31 12 2018 10:58:36.134:INFO [launcher]: Starting browser ChromeHeadless
31 12 2018 10:59:36.146:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 10:59:36.163:INFO [launcher]: Trying to start ChromeHeadless again (1/2).
31 12 2018 11:00:36.223:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 11:00:36.236:INFO [launcher]: Trying to start ChromeHeadless again (2/2).
31 12 2018 11:01:36.296:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing.
31 12 2018 11:01:36.310:ERROR [launcher]: ChromeHeadless failed 2 times (timeout). Giving up.

在同一个docker映像中本地运行相同的命令(用相同的映像启动一个容器相同的命令),我不会得到相同的错误,测试运行良好。

经过一些搜索后,我尝试添加其他标志——没有沙箱。这是我当前的浏览器配置:

customLaunchers: {
ChromeKarma: {
base: 'ChromeHeadless',
// We must disable the Chrome sandbox when running Chrome inside Docker (Chrome's sandbox needs
// more permissions than Docker allows by default)
flags: [
'--disable-web-security',
'--disable-gpu',
'--no-sandbox',
'--remote-debugging-port=9222'
]
}
},

我还尝试将sleep添加到管道中的命令列表中,然后连接到容器并手动运行测试。这不会产生错误,并且测试运行良好。

Docker版本为:Docker 17.05.0-ce版本,构建89658be

我还应该提到,在容器中,我运行了一个ps ax,看到铬过程开始并一直持续到因果报应杀死它们。

我自己解决了这个问题。在我们的网络中,我们使用代理访问互联网。事实证明,这阻止了chrome连接到karma网络服务器。我不得不取消设置代理才能让它工作。解决这个问题的另一种方法是,在不必删除代理的情况下,将以下标志添加到因果报应中。

'--proxy-bypass-list=*',
'--proxy-server='http://<my org proxy server>:8080''

最新更新