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
相关产品推荐
相关产品推荐

