'--禁用dev shm用法';无法解决Docker中的Chrome崩溃问题

'--禁用dev shm用法';无法解决Docker中的Chrome崩溃问题,docker,protractor,puppeteer,Docker,Protractor,Puppeteer,由于我们的e2e测试已经扩展到超过50个测试,我们决定并行运行测试以加快测试速度。由于默认的gitlab管道资源有限(而且dev shm size技巧不起作用),我们决定使用我们自己的AWS runner。 对于在Docker中运行量角器测试的用户,您必须添加以下标志以防止浏览器崩溃问题: chromeOptions: { args: [ "--no-sandbox", "--head

由于我们的e2e测试已经扩展到超过50个测试,我们决定并行运行测试以加快测试速度。由于默认的gitlab管道资源有限(而且
dev shm size
技巧不起作用),我们决定使用我们自己的AWS runner。 对于在Docker中运行量角器测试的用户,您必须添加以下标志以防止浏览器崩溃问题:

chromeOptions: {
                args: [
                    "--no-sandbox",
                    "--headless",
                    "--disable-gpu",
                    "--disable-dev-shm-usage"
                ]
至少到目前为止,我在网上找到了这一点

我使用multicapabilities和Puppeter在Docker中使用上面提供的Chrome参数运行e2e测试。默认情况下,gitlab runner测试将启动,但很可能会随机失败,并出现随机超时错误。我花了将近一周的时间试图解决这个问题,突然间,这个超时问题似乎是由已知错误引起的,而实际发生的是浏览器在docker中崩溃。 但是现在(当切换到我们的runner时),我在使用AWS runner时遇到了“DevToolsActivePort文件不存在”错误

[chrome #01] WebDriverError: unknown error: DevToolsActivePort file doesn't exist
[chrome #01]   (Driver info: chromedriver=2.44.609551 (5d576e9a44fe4c5b6a07e568f1ebc753f1214634),platform=Linux 4.4.0-1052-aws x86_64)

当使用默认的免费Gitlab runner时,测试是非常脆弱的;慢;随机失败(这就是为什么我们决定使用自己的跑步者)。但是在使用我们的runner时,由于上述错误,测试甚至没有启动。同样,由于所有必需的标志都存在于量角器配置中,因此不应发生此错误。 使用自定义运行程序时,如何解决“DevToolsActivePort文件不存在”的问题? 这是量角器配置的一部分

multiCapabilities: [
        {
            browserName: "chrome",
            specs: ["./src/dashboard-spec.ts"],
            chromeOptions: {
                args: [
                    "--no-sandbox",
                    "--headless",
                    "--disable-gpu",
                    "--disable-dev-shm-usage",
                    "--window-size=1920,1040",
                ],
                binary: puppeteer.executablePath(),
            },
        },
        {
            browserName: "chrome",
            specs: ["./src/smoke-test.ts"],
            chromeOptions: {
                args: [
                    "--no-sandbox",
                    "--headless",
                    "--disable-gpu",
                    "--disable-dev-shm-usage",
                    "--window-size=1920,1040",
                ],
                binary: puppeteer.executablePath(),
            },
        },
    ],
更新 我正在使用

webdriver-manager update --standalone false --gecko false --versions.chrome 2.44
我知道你可能会建议更新webdriver,但这个版本是我唯一一个设法与Puppeter合作的版本

更新2 Docker文件:

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable xvfb gtk2-engines-pixbuf xfonts-cyrillic xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable imagemagick x11-apps default-jre \
      --no-install-recommends \
      ruby && \
      gem install s3_website \
    && rm -rf /var/lib/apt/lists/*


RUN \
  npm install npm@latest -g &&\
  npm install -g @angular/cli

无论是在本地还是在免费的gitlab runner上,一切都运行良好(除了缓慢、片状、随机超时等)。但是当我们尝试使用自己的跑步者时,我想我在我的案例中发现了问题

如果我运行
df-h
,我会得到这个

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       16G   15G  547M  97% /
问题发生得稍早一点,当时空间可能并不重要,比如说
80%
,这就是我错过它的原因

我发现我的
/var/jenkins/workspace
像10Gb,因为我在不知道这一点的情况下归档了一年的报告,这是因为我的jenkins HTML publisher设置

我的解决办法是
  • 从目录中删除旧报告的步骤
  • keep all
    标志设置为
    false
    ,以防止将来过度填充,因为我正在存档报告
  • publishHTML([
    允许缺失:对,
    alwaysLinkToLastBuild:false,
    包括:“***”,
    
    基帕尔:没错,老问题,但一个类似的问题几乎让我发疯,所以分享我的解决方案:

    当我将Docker image Chrome安装从旧版本更新到Chrome 86时,我遇到了这个错误。我的设置不完全相同,但我们正在通过selenium webdriver实例化Chrome


    解决方案是将选项作为
    goog:chromeOptions
    hash传递,而不是
    chromeOptions
    hash。我真的不知道这是Selenium、Chrome、Chromedriver还是其他更新,但也许一些可怜的灵魂将来会在这个答案中找到慰藉。

    Q-你为什么要将量角器用于木偶?你也是将您的Chrome浏览器命名为
    root
    user?如果是,请尝试更改它。@demouser123我不知道,所以它可能表示“否”。这是我需要添加到CI脚本中的内容吗?(我说的是“root”用户)我已经有同样的问题很久了…据我所知,您正在Docker中运行测试,对吗?如果是这样,请附上您的DockerFile感谢您的分享!查看空间使用的好观点它似乎是一个Chromedriver更改。。。。。
    publishHTML([
        allowMissing: true,
        alwaysLinkToLastBuild: false,
        includes: '**/*',
        keepAll: true, <--------------- this guy
        reportDir: 'reports/',
        reportFiles: reports,
        reportName: 'HTML Report',
        reportTitles: tabs
    ])