Gitlab CI/CD测试任务单元测试成功但Job报错退出问题排查
GitLab流水线测试任务显示成功但Job失败的排查与解决
问题描述
项目在GitLab流水线执行测试任务时,控制台显示单元测试“SUCCESS”,但任务最终失败,退出码为1。
相关配置文件
.gitlab-ci.yml
cache: paths: - node_modules - dist default: image: node:lts stages: - build - test build: stage: build before_script: - bash ci/build/build_tools_install.sh script: - bash ci/build/build_app.sh tests: stage: test variables: CI: "true" before_script: - bash ci/tests/tests_tools_install.sh script: - bash ci/tests/tests_run.sh
tests_tools_install.sh
#!/bin/bash # 在控制台显示调试信息 set -xe # 用于控制Chrome的库,内置Chrome npm install puppeteer@18.0.0 # 添加在无头模式下启动Chrome所需的系统库 apt update -yqq apt install -yqq gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
tests_run.sh
#!/bin/bash= # 在控制台显示调试信息 set -xe # 设置CHROME_BIN变量指向Chrome二进制文件 export CHROME_BIN=`find $CI_PROJECT_DIR/node_modules/puppeteer -name "chrome"` # 使用本地安装的Angular CLI启动Angular测试 node_modules/.bin/ng test --code-coverage=false --watch=false
控制台输出
04 07 2023 17:17:38.656:INFO [launcher]: Launching browsers ChromeHeadlessNoSandbox with concurrency unlimited 04 07 2023 17:17:38.659:INFO [launcher]: Starting browser ChromeHeadless 04 07 2023 17:17:38.907:INFO [Chrome Headless 106.0.5249.0 (Linux x86_64)]: Connected on socket uFBxUufDl-2onOYIAAAB with id 77018412 Chrome Headless 106.0.5249.0 (Linux x86_64): Executed 0 of 5 SUCCESS (0 secs / 0 secs) Chrome Headless 106.0.5249.0 (Linux x86_64): Executed 0 of 5 (skipped 5) SUCCESS (0.023 secs / 0 secs) TOTAL: 0 SUCCESS TOTAL: 0 SUCCESS TOTAL: 0 SUCCESS =============================== Coverage summary =============================== Statements : Unknown% ( 0/0 ) Branches : Unknown% ( 0/0 ) Functions : Unknown% ( 0/0 ) Lines : Unknown% ( 0/0 ) ================================================================================ ✔ Browser application bundle generation complete. ✔ Browser application bundle generation complete. Cleaning up project directory and file based variables 00:01 ERROR: Job failed: exit code 1
问题分析
- 脚本语法错误:
tests_run.sh第一行#!/bin/bash=多了一个等号,导致脚本执行时直接报错,触发非0退出码。 - 测试全部被跳过:控制台显示
skipped 5,说明没有实际执行测试用例。Angular CLI默认在测试套件为空或全部跳过的情况下,会返回非0退出码,导致GitLab Job判定失败。
解决方案
修复脚本语法错误
编辑tests_run.sh,将第一行改为正确的shebang:#!/bin/bash # 在控制台显示调试信息 set -xe # 设置CHROME_BIN变量指向Chrome二进制文件 export CHROME_BIN=`find $CI_PROJECT_DIR/node_modules/puppeteer -name "chrome"` # 使用本地安装的Angular CLI启动Angular测试 node_modules/.bin/ng test --code-coverage=false --watch=false排查测试跳过原因
- 检查测试文件命名是否符合Angular规范(默认识别
.spec.ts后缀) - 确认
angular.json中test配置的include路径是否包含测试文件 - 检查测试代码中是否存在全局跳过标记(如
xdescribe、xit)
- 检查测试文件命名是否符合Angular规范(默认识别
强制跳过测试时返回成功码
如果确实需要保留跳过的测试,可在ng test命令后添加--no-fail-on-empty-test-suite参数,确保全部跳过也返回0退出码:node_modules/.bin/ng test --code-coverage=false --watch=false --no-fail-on-empty-test-suite
内容的提问来源于stack exchange,提问作者DLx
相关产品推荐
相关产品推荐

