运行 GitLab CI 管道与 Docker Centos 7.5 图像时,ChromeHeadless 超时

ChromeHeadless giving timeout when running GitLab CI pipeline with Docker Centos 7.5 image

所以我正在尝试 运行 使用 GitLab CI 的管道在 Centos 7.5 的 docker 图像上对 Angular 6 应用程序进行 Karma 测试。

问题是

30 08 2018 07:09:55.222:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing. 30 08 2018 07:09:55.244:INFO [launcher]: Trying to start ChromeHeadless again (1/2). 30 08 2018 07:10:55.264:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing. 30 08 2018 07:10:55.277:INFO [launcher]: Trying to start ChromeHeadless again (2/2). 30 08 2018 07:11:55.339:WARN [launcher]: ChromeHeadless have not captured in 60000 ms, killing. 30 08 2018 07:11:55.355:ERROR [launcher]: ChromeHeadless failed 2 times (timeout). Giving up. ERROR: Job failed: exit code 1

我运行测试ng test --browsers ChromeHeadlessNoSandbox --watch=false --code-coverage

业力会议:

browsers: ['Chrome', 'ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox',
          '--disable-setuid-sandbox',
          '--disable-gpu',
          '--remote-debugging-port=9222',
        ],
      },
    },

还有图像上的 docker 文件我安装了最新的 chrome 稳定版:

RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
RUN yum -y localinstall google-chrome-stable_current_x86_64.rpm && yum clean all

你知道它为什么会超时吗?在本地环境中,它 运行 完美。

我已经解决了同样的问题。我的测试服在我的本地机器上运行完美,但是当 运行 这些测试在 docker 容器中时,由于连接超时而失败。 (我也在使用 Gitlab runner,我的 docker 图片是基于 circleci/node:8.9.2-browsers

调查此问题后,我发现 docker 文件中缺少 chrome bin 变量路径。所以我通过添加解决了这个问题: export CHROME_BIN=/usr/bin/google-chrome 到我的 .gitlab-ci.yml 在 before_script

# TESTING
unit_test_client:
  stage: test
  before_script:
    - export CHROME_BIN=/usr/bin/google-chrome
  script:
    - npm run test:client

您也可以通过设置 CHROME_BIN 来解决您的问题 process.env.CHROME_BIN='/usr/bin/google-chrome' 在你的业力配置文件的顶部。 在这种情况下,你需要处理你是运行本地机器测试的情况,可能它应该匹配相同的chrome路径

您可能想在 Karma 尝试启动浏览器之前检查控制台输出。当我的 Angular 应用程序中存在无效的导入路径时,我因持续超时而卡住了数小时。 Karma 在控制台中打印此类错误,但继续启动浏览器,就好像这些错误无关紧要一样。这有点误导,但在指责浏览器之前值得检查。

其次,机器性能:偶尔你可能会在第一次尝试启动时超时,但下一次尝试很可能会成功。 Dockerization 可能会降低您的性能,但不会降低太多。即使设置最少,无头 Chrome 也应该 运行 很快。

如果您的浏览器无法安装或无法寻址,那么也应该有一些与此相关的输出。

你好,我是这样解决这个问题的:

在我的例子中,客户端有一个代理拦截器来管理网络配置。所以我在 customLauncher 标志中提供了代理作为服务器并且工作得很好,但只在管道中,本地测试停止了。但它只是取消了 运行 在本地的代理。

之前:这种方式在本地测试 运行s,但在 jenkins 管道中不起作用(npm 运行 测试)


browsers: ['MyChromeHeadless'], 
    customLaunchers: {
    MyChromeHeadless: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox',
          '--proxy-auto-detect'
        ]
      }
    }

之后:通过这种方式测试 运行s 在管道中,但在本地不起作用,因为我不在客户端网络下,可以访问提供的代理,如果是的话,应该可以工作。


browsers: ['MyChromeHeadless'], 
    customLaunchers: {
    MyChromeHeadless: {
        base: 'ChromeHeadless',
        flags: [
          '--no-sandbox',
          '--proxy-bypass-list=*',
          '--proxy-server=http://proxy.your.company'
        ]
      }
    }

我们遇到了同样的问题,并通过在 karma.config.js

中添加以下标记解决了该问题
headlessChrome: {
   base: "ChromeHeadless",
   flags: [
          "--no-sandbox",
          "--no-proxy-server",
          "--disable-web-security",
          "--disable-gpu",
          "--js-flags=--max-old-space-size=8196", // THIS LINE FIXED IT!!!
   ],