使用GitLab Dind运行Selenoid测试失败求助
解决GitLab CI中Selenoid测试的
mvn: command not found问题 核心问题分析
你的test阶段使用了docker:latest镜像,这个镜像仅包含Docker工具链,没有预装Java和Maven,所以执行mvn命令时会提示找不到。之前尝试用apt-get安装未生效,是因为docker:latest默认基于Alpine Linux,需要用apk而非apt-get包管理器。
修正后的GitLab CI配置示例
下面是适配Java Maven + Selenoid的流水线配置,解决了环境依赖问题,同时简化了Selenoid的启动流程:
image: maven:3.8-openjdk-11 variables: MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository" # Docker-in-Docker 配置 DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 # Selenoid 相关变量 SELENOID_CONFIG_DIR: $CI_PROJECT_DIR/selenoid/config SELENOID_VIDEO_DIR: $CI_PROJECT_DIR/selenoid/video stages: - build - test cache: paths: - .m2/repository - selenoid/ build: stage: build script: - mvn ${MAVEN_OPTS} clean install -DskipTests test: stage: test # 在Maven镜像中安装Docker客户端,同时保留Java/Maven环境 before_script: - apt-get update && apt-get install -y docker.io # 创建Selenoid所需的配置和视频目录 - mkdir -p ${SELENOID_CONFIG_DIR} ${SELENOID_VIDEO_DIR} # 使用cm工具生成浏览器配置文件 - docker run --rm -v ${SELENOID_CONFIG_DIR}:/output aerokube/cm:latest-release browsers --chrome 110.0 --output /output/browsers.json services: - name: docker:20.10.16-dind alias: docker - name: aerokube/selenoid:latest-release alias: selenoid # 挂载配置和视频目录,传递环境变量 command: ["-conf", "/opt/selenoid/config/browsers.json", "-video-output-dir", "/opt/selenoid/video"] volumes: - ${SELENOID_CONFIG_DIR}:/opt/selenoid/config - ${SELENOID_VIDEO_DIR}:/opt/selenoid/video - name: selenoid/chrome:110.0 script: # 验证Selenoid状态 - curl -s http://selenoid:4444/status # 执行Maven测试,指定Selenoid地址 - mvn ${MAVEN_OPTS} clean test -Dcucumber.filter.tags=${FEATURE_TAG} -Dbrowser=chrome -Denv=${ENVIRONMENT} -Dselenide.remote=http://selenoid:4444/wd/hub artifacts: when: always name: "report" paths: - test-output/* - selenoid/video/* expire_in: 1 h
关键配置说明
- 环境依赖统一:
test阶段复用顶部的maven:3.8-openjdk-11镜像,通过before_script安装Docker客户端,这样同时具备Maven和Docker环境,解决mvn命令找不到的问题。 - Selenoid启动优化:
- 使用
aerokube/cm工具自动生成浏览器配置文件,无需手动维护browsers.json - 通过
volumes挂载仓库内的配置和视频目录,避免重复启动Selenoid容器 - 直接在
services中配置Selenoid的启动参数,无需额外docker run命令
- 使用
- 测试参数传递:测试命令中添加
-Dselenide.remote=http://selenoid:4444/wd/hub,确保测试用例连接到Selenoid服务。
额外注意事项
- 确保GitLab Runner启用了Docker-in-Docker权限(配置
privileged: true) - 如果使用Selenoid UI,可在
services中添加aerokube/selenoid-ui:latest-release,并通过http://selenoid-ui:8080访问 - 视频文件会被保存到
selenoid/video目录,可通过artifacts下载查看
内容的提问来源于stack exchange,提问作者SRM21
相关产品推荐
相关产品推荐

