jenkins-pipeline - 使用 Puppeteer 捕获 ChromeHeadless 启动器的问题
问题描述
有人可以帮我解决这个问题吗?
我得到了“[启动器]:ChromeHeadless 没有在 60000 毫秒内捕获,正在杀死。” 当管道 (Jenkins) 尝试使用 karma 执行测试时 (Puppeteer using ChromeHeadless)
我们要求客户端将启动器从 Phantomjs 更改为 ChromeHeadless;
我们已经尝试了很多东西,直到现在都没有任何效果,我不知道如何解决它。
有关项目配置的一些信息:
我们使用 Angular 7、业力依赖和 puppeteer 如下:
package.json
{
"name": "xxxxxxxx",
"version": "0.0.0",
"license": "my",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test -c karma.conf.js -cc --browsers MyChromeHeadless",
"lint": "ng lint",
"e2e": "ng e2e"
},
"dependencies": {
"@angular-devkit/build-angular": "^0.13.9",
"@angular/animations": "7.2.15",
"@angular/common": "7.2.15",
"@angular/compiler": "7.2.15",
"@angular/core": "7.2.15",
"@angular/forms": "7.2.15",
"@angular/http": "7.2.15",
"@angular/platform-browser": "7.2.15",
"@angular/platform-browser-dynamic": "7.2.15",
"@angular/router": "7.2.15",
"@ng-bootstrap/ng-bootstrap": "1.0.0-beta.4",
"@ngx-translate/core": "^8.0.0",
"angl-spawebbgrl": "^6.2.0",
"angular2-text-mask": "^8.0.4",
"angular2-tinymce": "2.1.2",
"angular2-ui-switch": "^1.2.0",
"bootstrap": "^3.3.7",
"core-js": "2.4.1",
"font-awesome": "^4.7.0",
"intl": "^1.2.5",
"jquery": "^3.4.1",
"moment": "^2.24.0",
"ng2-bs3-modal": "^0.10.4",
"ng2-translate": "^5.0.0",
"ngx-bootstrap": "1.9.3",
"ngx-toastr": "^6.5.0",
"puppeteer": "^2.0.0",
"rxjs": "6.5.3",
"rxjs-compat": "^6.0.0-rc.0",
"text-mask-addons": "^3.7.0",
"tslib": "^1.9.0",
"xlsx": "^0.12.0",
"zone.js": "0.8.29"
},
"devDependencies": {
"@angular/cli": "^7.3.9",
"@angular/compiler-cli": "^7.2.15",
"@angular/language-service": "^7.2.15",
"@types/jasmine": "3.4.6",
"@types/jasminewd2": "2.0.8",
"@types/node": "8.10.59",
"bower-art-resolver": "^2.0.10",
"chai": "4.2.0",
"codelyzer": "3.0.1",
"jasmine-core": "3.5.0",
"jasmine-spec-reporter": "4.2.1",
"karma": "^4.4.1",
"karma-chai": "0.1.0",
"karma-chrome-launcher": "3.1.0",
"karma-cli": "2.0.0",
"karma-coverage": "^2.0.1",
"karma-coverage-istanbul-reporter": "2.1.0",
"karma-jasmine": "2.0.1",
"karma-jasmine-html-reporter": "1.4.2",
"karma-junit-reporter": "2.0.1",
"karma-mocha": "^1.1.1",
"karma-sinon": "1.0.5",
"mocha": "^6.2.2",
"mocha-junit-reporter": "1.23.1",
"protractor": "^6.0.0",
"selenium-webdriver": "^3.6.0",
"sinon": "1.17.5",
"ts-node": "3.0.4",
"tslint": "5.3.2",
"typescript": "^3.1.1"
},
"optionalDependencies": {
}
}
我们的业力配置:
karma.conf.js
module.exports = function (config) {
const process = require('process');
process.env.CHROME_BIN = require('puppeteer').executablePath();
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-coverage'),
require('karma-coverage-istanbul-reporter'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
files:[
'src/test.ts'
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true,
dir: 'coverage',
'report-config': { html: { subdir: 'html'} }
},
reporters: ['progress', 'kjhtml', 'coverage'],
port: 9876,
logLevel: config.LOG_DEBUG,
autoWatch: false,
singleRun: true,
browsers: ['MyChromeHeadless'],
customLaunchers: {
MyChromeHeadless: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--proxy-auto-detect'
]
}
}
});
};
当 jenkins 尝试执行测试时会发生此错误,但在本地运行一切正常。这个问题是特定于在 linux 机器上运行的管道;
有人帮我搞定'[启动器]:ChromeHeadless 在 60000 毫秒内没有捕获,正在杀戮。固定的?
欢迎任何建议。咳咳!
解决方案
我发现了如何解决这个问题。
客户端有一个代理阻止程序来管理网络配置。因此,我在 customLauncher 标志中提供了代理作为服务器,并且工作正常,但仅在管道中,测试在本地停止。但它只是取消在本地运行的代理。
之前:这种方式测试在本地运行,但在 jenkins 管道中不起作用(npm run test)
browsers: ['MyChromeHeadless'],
customLaunchers: {
MyChromeHeadless: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--proxy-auto-detect'
]
}
}
之后:这样测试在管道中运行,但不能在本地运行,因为我不在客户端网络下,可以访问所提供的代理
browsers: ['MyChromeHeadless'],
customLaunchers: {
MyChromeHeadless: {
base: 'ChromeHeadless',
flags: [
'--no-sandbox',
'--proxy-bypass-list=*',
'--proxy-server=http://proxy.your.company'
]
}
}
推荐阅读
- wcag - WCAG - 是否应将具有动态填充数据的表(行)包含在选项卡顺序中?
- python - 当使用与文档中相同的语法和对象类型时,Panda3D GeomVertex Writer/Rewriter 类型错误的原因是什么?
- google-cloud-endpoints - Google Cloud Endpoints 门户 - 内部服务器错误
- mysql - 由于神秘错误,无法从控制台运行数据透视表 mysql 查询
- git - 错误:RPC 失败;curl 55 发送失败:连接被中止
- spectrum - 如果您在 Multism 中没有频谱分析仪怎么办?
- python - 为什么我不能导入 PyTube?
- javascript - 为什么调用一个`setState`函数会更新一个完全独立的状态值?
- python - 在循环中请求新代理导致代理错误并崩溃
- python - 蟒蛇 | JSONPath-ng:过滤器和值提取问题