"--disable-dev-shm-usage"不能解决Docker中的Chrome崩溃问题



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

chromeOptions: {
args: [
"--no-sandbox",
"--headless",
"--disable-gpu",
"--disable-dev-shm-usage"
]

至少这是我迄今为止在网上找到的。

我正在使用多功能和Puppeteer使用上面提供的Chrome参数在Docker中运行我的e2e测试。在默认的 gitlab 运行器中,测试开始,但很可能会随机失败并出现随机超时错误。我试图解决这个问题将近一周,突然间似乎由于已知错误而发生此超时问题,实际发生的是浏览器在 docker 中崩溃。 但是现在(切换到我们的运行器时(我在使用 AWS 运行器时遇到"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运行时,运行器测试非常不稳定;缓慢;并且随机失败(这就是我们决定使用自己的运行器的原因(。但是在使用我们的跑步者测试时,由于上述错误,甚至没有开始。同样,此错误不应发生,因为所有必需的标志都存在于量角器配置中。 如何解决使用自定义运行器时的'DevToolsActivePort file doesn't exist'问题? 这是量角器配置的一部分

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

我知道您可能会建议更新网络驱动程序,但此版本是我设法与Puppeteer合作的唯一版本

更新 2码头工人文件:

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 运行器上,一切都运行良好(除了缓慢、不稳定、随机超时等(。但不是当我们尝试使用自己的跑步者时

老问题,但类似的问题几乎让我精神错乱,所以分享我的解决方案:

当我将 Docker 映像 Chrome 安装从旧版本更新到 Chrome 86 时,出现此错误。我的设置并不相同,但我们通过硒网络驱动程序实例化Chrome。

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

我想我在我的案例中发现了问题

如果我跑df -h我会得到这个

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       16G   15G  547M  97% /

问题开始发生得更早一点,当时空间可能并不重要,比方说80%这就是我错过它的原因

事实证明,我的/var/jenkins/workspace就像 10Gb 一样,因为我在不知道的情况下存档了一年的报告,因为我的 jenkins HTML 发布者设置

我的解决方案是

  1. 从目录中删除旧报表
  2. keep-all标志设置为false,以防止将来溢出,因为我无论如何都在存档报告
publishHTML([
allowMissing: true,
alwaysLinkToLastBuild: false,
includes: '**/*',
keepAll: true, <--------------- this guy
reportDir: 'reports/',
reportFiles: reports,
reportName: 'HTML Report',
reportTitles: tabs
])
  1. 并向/dev/xvda1添加额外的 4 Gb

最新更新