You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Angular 15+后Jenkins执行Karma测试构建卡住问题

Angular 15+升级后Jenkins构建在Karma测试阶段停滞的问题

我们通过frontend-maven-plugin构建Angular UI,升级至Angular 15+后,Karma单元测试全部通过(无跳过用例),但Jenkins构建在测试阶段结束后完全停滞,无任何后续动作。移除单元测试环节后,构建可正常完成。

已尝试以下优化措施,均未解决问题:

  • 禁用Chrome沙箱
  • 启用无头模式
  • 设置watch=false
  • 设置progress=false

Jenkins日志最后一行显示:

[2023-07-20T10:24:57.311Z] [INFO] TOTAL: 3 SUCCESS

即使新建带有Karma测试的Angular 15+项目,Jenkins构建仍会卡住。

Jenkins流水线执行步骤

  1. 下载并安装Node.js及npm:
<id>install node and npm</id>
<goals>
    <goal>install-node-and-npm</goal>
    <nodeDownloadRoot>
        https://artifactory.swisscom.com/artifactory/nodejs-dist-remote-cache/
    </nodeDownloadRoot>
    <npmDownloadRoot>https://artifactory.swisscom.com/artifactory/npm-remote/npm/-/
  1. 执行npm ci
  2. 执行npm test

package.json关键配置

  • 测试命令:
"test": "ng test --source-map=false --watch=false --browsers=ChromeHeadless --progress=false"
  • 依赖版本:
"@angular/animations": "^16.1.0",
"@angular/common": "^16.1.0",
"@angular/compiler": "^16.1.0",
"@angular/core": "^16.1.0",
"@angular/forms": "^16.1.0",
"@angular/platform-browser": "^16.1.0",
"@angular/platform-browser-dynamic": "^16.1.0",
"@angular/router": "^16.1.0",
"devDependencies": {
    "@angular-devkit/build-angular": "^16.1.4",
    "@angular/cli": "~16.1.4",
    "@angular/compiler-cli": "^16.1.0",
    "@types/jasmine": "~4.3.0",
    "jasmine-core": "~4.6.0",
    "karma": "~6.4.0",
    "karma-chrome-launcher": "~3.1.1",
    "karma-coverage": "~2.2.0",
    "karma-jasmine": "~5.1.0",
    "karma-jasmine-html-reporter": "~2.1.0",
    "typescript": "~5.1.3"
}

可行解决方法

1. 补充ChromeHeadless启动参数

给ChromeHeadless添加针对Jenkins环境的适配参数,修改test命令:

"test": "ng test --source-map=false --watch=false --browsers=ChromeHeadless --progress=false --no-sandbox --disable-gpu --disable-dev-shm-usage --single-run"

其中--disable-dev-shm-usage会让Chrome使用临时文件替代共享内存,避免Jenkins节点因/dev/shm空间不足导致进程挂起;--single-run强制测试完成后立即退出。

2. 移除Karma Jasmine HTML报告器

karma-jasmine-html-reporter在无头环境下可能存在进程未正常退出的问题,临时移除该依赖并修改配置:

  • 从devDependencies中删除karma-jasmine-html-reporter
  • 修改karma.conf.js,去掉require('karma-jasmine-html-reporter')引用及对应的reporter配置项

3. 强制终止Karma进程

在npm test命令后添加进程清理逻辑,确保测试完成后彻底关闭Karma相关进程:

"test": "ng test --source-map=false --watch=false --browsers=ChromeHeadless --progress=false && pkill -f karma"

也可以在Jenkins流水线的npm test步骤后,单独添加一个Shell步骤执行pkill -f karma。

4. 升级Karma及Chrome启动器版本

当前karma-chrome-launcher版本较旧,升级至适配Angular 16的稳定版:

"karma": "~6.4.2",
"karma-chrome-launcher": "^3.2.0"

更新后重新执行npm ci安装依赖。

5. 检查Jenkins节点资源

Jenkins节点内存、CPU不足可能导致Chrome进程无法正常退出,查看节点资源使用情况,必要时增加节点内存配额。

内容的提问来源于stack exchange,提问作者anurag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:33:14