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

请求协助搭建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:44