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

GitLab CI配置中启动Selenium失败及运行Selenium的方法咨询

GitLab CI配置中启动Selenium失败及运行Selenium的方法咨询

看起来你遇到了GitLab CI配置里的两个关键问题:一是你写了两个image指令,但GitLab CI只会采用最后一个(也就是node:14.15.0-stretch),这个镜像里既没有Selenium的启动脚本/opt/bin/start-selenium-standalone.sh,也没有PHP环境,所以不仅Selenium启动不了,连php artisan test也会执行失败。下面给你几个可行的解决方案:

方案一:使用Services分离Selenium服务(推荐)

这种方式把Selenium作为独立服务运行,主镜像选用同时包含Node和PHP的现成镜像,既简洁又高效。

修改后的CI配置示例:

test-dev:
  stage: test
  # 选用同时包含PHP和Node.js的镜像,比如bitnami的这个镜像
  image: bitnami/php-fpm:7.4-node
  # 添加Selenium服务,作为独立容器运行
  services:
    - name: selenium/standalone-chrome
      alias: selenium
  script:
    - npm i
    - npm run prod
    # 不需要手动启动Selenium,services会自动启动,测试时连接服务地址即可
    # 注意:你的Mocha测试代码里需要把Selenium的连接地址改成 http://selenium:4444/wd/hub
    - npx mocha tests/js/screenshots-* --timeout 50000
    - npx playwright test tests/js/pw_*
    - php artisan test
  artifacts:
    when: always
    name: $CI_COMMIT_SHA
    untracked: true
    paths:
      - tests/js/screenshots/
      - tests/js/screens/
      - tests/js/report/
  cache:
    untracked: true
    when: always
    paths:
      - tests/js/screenshots/
      - tests/js/screens/
      - tests/js/report/
      - storage/
      - vendor/ #composer packages
      - node_modules
      - public

说明:

  • services里的selenium/standalone-chrome会以独立容器的形式启动,主容器可以通过selenium这个别名访问它的4444端口(Selenium默认端口)。
  • 你需要调整Mocha测试代码中的Selenium客户端配置,把连接地址改成http://selenium:4444/wd/hub才能正常调用Selenium服务。
  • Playwright测试可以直接使用自带的浏览器,不需要依赖Selenium服务,所以无需额外调整。

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

如果不想用services,也可以在Node镜像里手动安装PHP、Chrome和Selenium,不过这种方式每次CI运行都要重新安装依赖,速度会慢一些。

配置示例:

test-dev:
  stage: test
  image: node:14.15.0-stretch
  script:
    # 安装PHP及所需扩展
    - apt-get update && apt-get install -y --no-install-recommends php-cli php-mbstring php-xml php-zip
    # 安装Chrome浏览器
    - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
    - echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
    - apt-get update && apt-get install -y --no-install-recommends google-chrome-stable
    # 下载并启动Selenium Server
    - wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.15.0/selenium-server-4.15.0.jar
    - java -jar selenium-server-4.15.0.jar standalone &
    # 等待Selenium启动完成(根据实际情况调整等待时间)
    - sleep 10
    # 执行原有测试脚本
    - npm i
    - npm run prod
    - npx mocha tests/js/screenshots-* --timeout 50000
    - npx playwright test tests/js/pw_*
    - php artisan test
  artifacts:
    when: always
    name: $CI_COMMIT_SHA
    untracked: true
    paths:
      - tests/js/screenshots/
      - tests/js/screens/
      - tests/js/report/
  cache:
    untracked: true
    when: always
    paths:
      - tests/js/screenshots/
      - tests/js/screens/
      - tests/js/report/
      - storage/
      - vendor/ #composer packages
      - node_modules
      - public

方案三:使用自定义镜像

如果CI运行频率较高,你可以预先构建一个包含Node、PHP、Chrome和Selenium的自定义Docker镜像,上传到镜像仓库后直接在CI配置中使用,这样能大幅缩短CI运行时间。

比如Dockerfile示例:

# 基于PHP镜像构建
FROM php:7.4-cli-stretch

# 安装Node.js 14.x
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs

# 安装Chrome浏览器
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list
RUN apt-get update && apt-get install -y google-chrome-stable

# 安装Selenium Server
RUN wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.15.0/selenium-server-4.15.0.jar -O /opt/bin/selenium-server.jar
RUN echo '#!/bin/bash\njava -jar /opt/bin/selenium-server.jar standalone' > /opt/bin/start-selenium-standalone.sh
RUN chmod +x /opt/bin/start-selenium-standalone.sh

# 安装PHP扩展(根据项目需求调整)
RUN docker-php-ext-install mbstring xml zip

构建并推送镜像后,CI配置里就可以直接使用这个自定义镜像,脚本部分和你原来的配置基本一致,只需要去掉重复的image指令即可。

备注:内容来源于stack exchange,提问作者Miekrif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:07:34