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

Gitlab Runner运行Cypress报错libxshmfence.so.1缺失如何解决?

问题根因
  • 你使用的node:14.0.0是纯净Node运行镜像,缺失Cypress运行必须的系统底层依赖,ELECTRON_RUN_AS_NODE=1仅能跳过Xvfb虚拟显示服务的调用,无法解决底层共享库缺失的问题
  • 现有Gitlab CI配置存在逻辑问题:test阶段未显式关联依赖、多余执行npm ci覆盖已安装的依赖、服务启动无就绪等待逻辑
修复方案

方案一:使用Cypress官方预构建镜像(推荐,无需手动安装系统依赖)

直接替换基础镜像为Cypress官方提供的带浏览器和系统依赖的镜像,修改后的.gitlab-ci.yml如下:

# 替换为适配Node14的Cypress预构建镜像,已包含所有运行所需依赖
image: cypress/browsers:node14-ff96-chrome97

variables:
  API_BASE_URL: https://test.local.mysite.io/api
  npm_config_cache: '$CI_PROJECT_DIR/.npm'
  CYPRESS_CACHE_FOLDER: '$CI_PROJECT_DIR/cache/Cypress'

cache:
  paths:
    - node_modules/
    - cache/Cypress

stages:
  - install
  - build
  - test

install:
  stage: install
  cache:
    key: 'e2eDeps'
    paths:
      - node_modules/
      - cache/Cypress/
  script:
    - npm i

build:
  stage: build
  dependencies:
    - install
  script:
    - npm run build
  artifacts:
    expire_in: 1 days
    when: on_success

tests:
  stage: test
  # 复用前置阶段的依赖和构建产物,无需重复安装
  dependencies:
    - install
    - build
  script:
    # 直接调用已配置好的test:ci脚本,会自动等待服务启动后再执行测试
    - npm run test:ci

同时修改package.json中test:cypress脚本,去掉多余的ELECTRON_RUN_AS_NODE=1参数:

"test:cypress": "cypress run --headless --browser chrome"

方案二:在现有Node镜像中手动安装依赖

如果你需要坚持使用node:14.0.0镜像,可以在test阶段执行脚本前先安装所需系统依赖:

tests:
  stage: test
  dependencies:
    - install
    - build
  script:
    # 安装Cypress所需系统依赖
    - apt-get update && apt-get install -y libxshmfence1 libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1 libasound2 xvfb
    - npm run test:ci
额外优化说明
  • 你已经在package.json中配置了test:ci脚本,使用start-test工具等待服务就绪,比直接后台启动服务更稳定,可避免服务未启动完成就执行测试的偶发失败
  • 去掉test阶段的npm ci命令,避免重复安装依赖,直接复用install阶段缓存的依赖即可
  • 删掉variables中重复定义的API_BASE_URL配置,避免变量覆盖问题

内容的提问来源于stack exchange,提问作者red house 87

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:39:02