请求协助搭建GitLab CI运行Java Selenium自动化测试环境
没问题!既然你已经在Jenkins上跑通了这个Maven+Selenium项目,迁移到GitLab CI其实没那么复杂,我给你一步步拆解:
第一步:确认GitLab Runner配置
首先你需要有能运行Java、Maven和浏览器的GitLab Runner。如果用GitLab的共享Runner,大部分情况下已经支持Docker镜像;如果是私有Runner,推荐用Docker executor(环境隔离性好,不用在服务器上装一堆依赖)。
如果你还没注册私有Runner,可以参考这个流程:
- 在你的服务器上安装GitLab Runner
- 执行注册命令,选择
docker作为executor,默认镜像可以先填maven:3.8.6-openjdk-11(包含JDK11和Maven3.8.6,足够跑Java项目)
第二步:编写核心的
.gitlab-ci.yml文件 这是GitLab CI的配置核心,直接放在项目根目录就行。根据你的场景,我给你两种方案:
方案1:直接在Job里安装浏览器(适合快速上手)
这种方案用基础的Maven镜像,在Job启动前安装Chrome浏览器和驱动,适合测试场景:
# 定义流水线阶段,这里我们只需要测试阶段 stages: - test # 定义Selenium测试Job selenium-auto-test: stage: test # 使用包含JDK和Maven的镜像 image: maven:3.8.6-openjdk-11 # 缓存Maven依赖,加快后续构建速度 cache: paths: - ~/.m2/repository/ # Job启动前的准备:安装Chrome浏览器和驱动 before_script: - apt-get update && apt-get install -y --no-install-recommends chromium chromium-driver # 执行测试命令,这里假设你的测试用例绑定在Maven的test阶段 script: - mvn clean test -Dwebdriver.chrome.driver=/usr/bin/chromedriver # 触发条件:开发者提交代码到任意分支,或者创建Merge Request时自动运行 only: - branches - merge_requests
方案2:用Selenium Grid服务(更稳定,适合长期运行)
如果你的测试用例较多,推荐用GitLab CI的services功能启动独立的Selenium节点,避免在Job镜像里折腾浏览器:
stages: - test selenium-auto-test: stage: test image: maven:3.8.6-openjdk-11 cache: paths: - ~/.m2/repository/ # 启动Selenium独立Chrome节点作为服务 services: - name: selenium/standalone-chrome:latest alias: selenium-hub script: # 通过远程WebDriver连接Selenium节点 - mvn clean test -Dwebdriver.remote.url=http://selenium-hub:4444/wd/hub only: - branches - merge_requests
第三步:调整你的Selenium测试代码
因为CI环境是无界面的,必须确保测试代码启用无头浏览器模式,同时加上CI环境必需的参数:
对应方案1的本地WebDriver配置:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class SeleniumTest { public static void main(String[] args) { ChromeOptions options = new ChromeOptions(); // Chrome 112+推荐用新的无头模式 options.addArguments("--headless=new"); // CI环境必需参数,避免权限和资源问题 options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); options.addArguments("--disable-gpu"); WebDriver driver = new ChromeDriver(options); // 你的测试逻辑... driver.quit(); } }
对应方案2的远程WebDriver配置:
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.RemoteWebDriver; import java.net.URL; public class SeleniumTest { public static void main(String[] args) throws Exception { ChromeOptions options = new ChromeOptions(); // 远程节点已经支持无头模式,无需额外配置(如果需要可以加上) WebDriver driver = new RemoteWebDriver(new URL("http://selenium-hub:4444/wd/hub"), options); // 你的测试逻辑... driver.quit(); } }
第四步:验证流水线
把.gitlab-ci.yml和调整后的测试代码提交到GitLab,然后去项目的「CI/CD」→「流水线」页面,就能看到代码提交后自动触发的测试任务了。如果遇到报错,优先看流水线日志:
- 如果是浏览器找不到,检查
before_script里的安装命令是否执行成功 - 如果是Maven依赖下载慢,确认缓存是否生效
这样整个流程就跑通了,完全复用你现有的Maven项目,不需要改太多代码~
内容的提问来源于stack exchange,提问作者user2756757
相关产品推荐
相关产品推荐

