Puppeteer无法在AWS CodeBuild上运行Chrome

时间:2018-01-12 17:25:50

标签: angular karma-jasmine puppeteer google-chrome-headless aws-codebuild

我正在使用Karma使用ChromeHeadless测试Angular4项目,所有这些都在本地运行良好。然后我尝试在AWS CodeBuild上运行它。最初的问题是CodeBuild VM不包括chrome headless,因此我包含了Puppeteer npm包并在Karma conf中相应地设置了ENV Var。这在本地仍然可以正常工作,但在AWS CodeBuild上我收到错误...

puppeteer/.local-chromium/linux-526987/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

构建是从执行maven mvn -B package的标准buildspec.yml触发的。角度构建/测试是使用eislett / frontend-maven-plugin(v1.4)从maven完成的。

Puppeteer v1.0.0 节点v6.10.1 Karma v1.7.1 AWS CodeBuild - Ubuntu / Java / OpenJDK 8

我已经在CI计算机上看到了有关其他安装的其他帖子,但CodeBuild在每次运行时都会调整一个干净的虚拟机,所以这不是一个选项。有什么建议!?

4 个答案:

答案 0 :(得分:3)

我在CodeBuild团队工作。您可以在每次构建期间安装缺少的软件包,作为构建规范的一部分:

  install:
    - apt-get install missing-package

或者构建一个自定义环境,以便与包含缺少的包的CodeBuild一起使用: https://aws.amazon.com/blogs/devops/extending-aws-codebuild-with-custom-build-environments/

CodeBuild的环境是开源的,可帮助您开始使用自定义环境: https://github.com/aws/aws-codebuild-docker-images

答案 1 :(得分:2)

我使用Jest& amp遇到同样的问题使用aws / codebuild / nodejs:7.0.0 CodeBuild映像进行反应。这就是我解决它的方法:

在buildspec.yml中:

# install chromium after updating apt-get (this will install dependencies)
phases:
  install:
    commands:
      - sudo apt-get update
      - sudo apt-get --assume-yes install chromium-browser
...

在测试代码中:

// launch puppeteer with the --no-sandbox option
...
var browser = await puppeteer.launch({args: ['--no-sandbox']});
...

答案 2 :(得分:1)

我终于(一年多以后!)开始了这项工作(没有p)。

buildspec.yml-安装Chrome稳定版

phases:
  pre_build:
    commands:
      - curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
      - echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
      - apt-get -y update
      - apt-get -y install google-chrome-stable

karma.conf.js-指定端口,主机名,侦听地址,禁用随机,延长超时时间和容忍度

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular/cli'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular/cli/plugins/karma')
    ],
    client:{
      clearContext: false, // leave Jasmine Spec Runner output visible in browser
      jasmine: {
        random: false
      }
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, 'coverage'),
      reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    },
    captureTimeout: 210000,
    browserDisconnectTolerance: 3,
    browserDisconnectTimeout : 210000,
    browserNoActivityTimeout : 210000,
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    listenAddress: 'localhost',
    hostname: 'localhost',
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
      ChromeHeadlessNoSandbox: {
        base: 'ChromeHeadless',
        flags: [
          '--headless',
          '--no-sandbox',
          '--password-store=basic',
          '--enable-logging',
          '--v=1'
        ],
      },
    },
    singleRun: true
  });
};

答案 3 :(得分:1)

您可以简单地使用带有chrome的aws docker映像-aws/codebuild/standard:3.0。 在构建的环境面板中对其进行编辑。