如何用.gitlab-ci.yml配置GitLab流水线的Selenium Cucumber框架及报错解决
一、.gitlab-ci.yml配置流程
- 选适配的Runner镜像:优先用自带Java、Maven的镜像,比如
maven:3.8.6-openjdk-11;如果要跑UI测试,要么用预装Chrome/Firefox的镜像,要么在流水线里手动装浏览器和驱动。 - 拆分流水线阶段:一般分
build(构建)、test(测试)两个核心阶段 - 完整示例配置:
stages: - build - test # 构建阶段:编译代码,跳过测试节省时间 build_job: stage: build image: maven:3.8.6-openjdk-11 script: - mvn clean compile -DskipTests artifacts: paths: - target/ # 把构建产物传给测试阶段 # 测试阶段:运行Cucumber测试 test_job: stage: test image: maven:3.8.6-openjdk-11 dependencies: - build_job # 依赖构建阶段的产物 before_script: # 安装Chrome浏览器和驱动(跑UI测试必备) - apt-get update && apt-get install -y chromium chromium-driver - export CHROME_BIN=/usr/bin/chromium - export CHROMEDRIVER=/usr/bin/chromedriver script: - mvn test -Dcucumber.options="--tags @UI" # 可按需指定要跑的Cucumber标签 artifacts: paths: - target/cucumber-reports/ # 保存测试报告 reports: junit: target/surefire-reports/*.xml # 让GitLab识别JUnit测试结果
二、依赖连接重置错误的解决办法
你遇到的错误是:
[ERROR] Failed to execute goal on project Samplemaven: Could not resolve dependencies for project org.example:Samplemaven:jar:1.0-SNAPSHOT: Failed to collect dependencies at io.cucumber:cucumber-java:jar:7.2.3: Failed to read artifact descriptor for io.cucumber:cucumber-java:jar:7.2.3: Could not transfer artifact io.cucumber:cucumber-java:pom:7.2.3 from/to central (http://repo.maven.apache.org/maven2): Connection reset -> [Help 1]
按下面的步骤挨个排查:
- 换HTTPS的中央仓库地址:把
pom.xml里的中央仓库地址从http://repo.maven.apache.org/maven2改成https://repo.maven.apache.org/maven2,HTTP协议现在很多环境会拦截或不稳定。 - 用国内Maven镜像:如果Runner网络访问官方仓库慢,在项目根目录建
settings.xml,配置阿里云镜像:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors> </settings>
然后在流水线的script命令里加上-s settings.xml,比如mvn test -s settings.xml,强制用这个配置拉依赖。
3. 检查Runner网络连通性:在流水线的before_script里加一句curl https://repo.maven.apache.org/maven2,看看能不能正常访问仓库地址,确认网络没被防火墙或代理挡住。
4. 强制更新依赖缓存:执行mvn clean install -U,让Maven跳过本地缓存,重新拉取最新的依赖描述文件。
内容的提问来源于stack exchange,提问作者Jack Vicky

