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

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

问题分析

  1. 脚本语法错误:tests_run.sh第一行#!/bin/bash=多了一个等号,导致脚本执行时直接报错,触发非0退出码。
  2. 测试全部被跳过:控制台显示skipped 5,说明没有实际执行测试用例。Angular CLI默认在测试套件为空或全部跳过的情况下,会返回非0退出码,导致GitLab Job判定失败。

解决方案

  1. 修复脚本语法错误
    编辑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
    
  2. 排查测试跳过原因

    • 检查测试文件命名是否符合Angular规范(默认识别.spec.ts后缀)
    • 确认angular.json中test配置的include路径是否包含测试文件
    • 检查测试代码中是否存在全局跳过标记(如xdescribe、xit)
  3. 强制跳过测试时返回成功码
    如果确实需要保留跳过的测试,可在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:14:56