ChromeHeadless 在管道中失败但在本地失败
ChromeHeadless fails inside pipeline but not locally
我有一个 angular 应用程序正在使用 karma 进行测试。我也在使用 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 图像中执行相同的命令(使用相同的图像相同的命令启动容器),我没有得到相同的错误,并且测试 运行 很好
经过一些搜索后,我尝试添加除 --no-sandbox 之外的其他标志。这是我当前的浏览器配置:
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'
]
}
},
我也试过在管道中的命令列表中添加睡眠,然后连接到容器并 运行手动测试。这不会产生错误,并且测试 运行 正常。
Docker 版本是:Docker 版本 17.05.0-ce,内部版本 89658be
我还应该提到,在容器内时,我 运行 一个 ps ax
并看到 chrome 进程启动并一直持续到 karma 杀死它们。
我自己解决了这个问题。在我们的网络内部,我们使用代理访问互联网。事实证明,这会阻止 chrome 连接到 karma 网络服务器。我必须取消设置代理才能让它工作。解决这个问题的另一种方法是在 karma 中添加以下标志,而不必删除代理。
'--proxy-bypass-list=*',
'--proxy-server=\'http://<my org proxy server>:8080\''
我有一个 angular 应用程序正在使用 karma 进行测试。我也在使用 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 图像中执行相同的命令(使用相同的图像相同的命令启动容器),我没有得到相同的错误,并且测试 运行 很好
经过一些搜索后,我尝试添加除 --no-sandbox 之外的其他标志。这是我当前的浏览器配置:
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'
]
}
},
我也试过在管道中的命令列表中添加睡眠,然后连接到容器并 运行手动测试。这不会产生错误,并且测试 运行 正常。
Docker 版本是:Docker 版本 17.05.0-ce,内部版本 89658be
我还应该提到,在容器内时,我 运行 一个 ps ax
并看到 chrome 进程启动并一直持续到 karma 杀死它们。
我自己解决了这个问题。在我们的网络内部,我们使用代理访问互联网。事实证明,这会阻止 chrome 连接到 karma 网络服务器。我必须取消设置代理才能让它工作。解决这个问题的另一种方法是在 karma 中添加以下标志,而不必删除代理。
'--proxy-bypass-list=*',
'--proxy-server=\'http://<my org proxy server>:8080\''