Puppeteer 无法在 AWS CodeBuild 上 运行 Chrome
Puppeteer unable to run Chrome on AWS CodeBuild
我正在使用 Karma 测试使用 ChromeHeadless 的 Angular4 项目,并且在本地一切正常。然后,我尝试在 AWS CodeBuild 上获取此 运行ning。最初的问题是 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
构建是从标准 buildspec.yml 执行 maven mvn -B package
触发的。 angular build/test 是使用 eislett/frontend-maven-plugin (v1.4) 从 maven 完成的。
木偶师 v1.0.0
节点 v6.10.1
业力 v1.7.1
AWS CodeBuild - Ubuntu / Java / OpenJDK 8
我看过其他关于在 CI 机器上进行额外安装的帖子,但 CodeBuild 在每台 运行 机器上启动了一个干净的虚拟机,所以那不是一个选项。有什么建议吗!?
我在 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
我 运行 使用 Jest & React,使用 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']});
...
我终于(一年多后!)让这个工作(没有木偶操纵者)。
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
});
};
您可以简单地将 aws docker 图像与 chrome - aws/codebuild/standard:3.0 一起使用。
在构建的环境面板中编辑它。
我正在使用 Karma 测试使用 ChromeHeadless 的 Angular4 项目,并且在本地一切正常。然后,我尝试在 AWS CodeBuild 上获取此 运行ning。最初的问题是 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
构建是从标准 buildspec.yml 执行 maven mvn -B package
触发的。 angular build/test 是使用 eislett/frontend-maven-plugin (v1.4) 从 maven 完成的。
木偶师 v1.0.0 节点 v6.10.1 业力 v1.7.1 AWS CodeBuild - Ubuntu / Java / OpenJDK 8
我看过其他关于在 CI 机器上进行额外安装的帖子,但 CodeBuild 在每台 运行 机器上启动了一个干净的虚拟机,所以那不是一个选项。有什么建议吗!?
我在 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
我 运行 使用 Jest & React,使用 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']});
...
我终于(一年多后!)让这个工作(没有木偶操纵者)。
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
});
};
您可以简单地将 aws docker 图像与 chrome - aws/codebuild/standard:3.0 一起使用。 在构建的环境面板中编辑它。