温馨提示×

ubuntu下gitlab如何实现自动化测试

小樊
48
2025-10-31 21:28:06
栏目: 智能运维

Ubuntu下GitLab实现自动化测试的完整步骤

1. 安装GitLab Runner

GitLab Runner是执行CI/CD任务的代理,需先在Ubuntu服务器上安装。常用安装方式(以Ubuntu 22.04为例):

# 添加GitLab Runner官方GPG密钥和软件源
curl -L --output /etc/apt/trusted.gpg.d/gitlab.asc https://packages.gitlab.com/gitlab/gitlab-runner/gpgkey
echo "deb https://packages.gitlab.com/gitlab/gitlab-runner/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab-runner.list

# 更新包列表并安装GitLab Runner
sudo apt-get update
sudo apt-get install gitlab-runner -y

安装完成后,可通过gitlab-runner --version验证是否成功。

2. 注册GitLab Runner

注册Runner以关联GitLab项目,需获取项目的Runner URLRegistration Token(在GitLab项目页面→Settings→CI/CD→Runners中查看)。

# 注册Runner(以Shell executor为例,适用于本地执行)
sudo gitlab-runner register \
  --url https://gitlab.com/ \  # 替换为你的GitLab实例URL
  --registration-token YOUR_TOKEN \  # 替换为项目中的Token
  --executor shell \  # 可选:docker、kubernetes等(根据需求选择)
  --description "Ubuntu GitLab Runner" \  # Runner描述
  --tag-list "ci,test" \  # Runner标签(用于匹配CI/CD配置中的tags)
  --run-untagged=false \  # 是否运行未打标签的Job
  --locked=false  # 是否锁定Runner仅用于特定项目

注册成功后,Runner会出现在GitLab项目的Runners列表中。

3. 创建.gitlab-ci.yml配置文件

在项目根目录下创建.gitlab-ci.yml文件,定义CI/CD流程(核心是stagesjobs)。以下是一个自动化测试的示例配置:

# 定义CI/CD流程的阶段(按顺序执行)
stages:
  - build
  - test
  - deploy

# 构建阶段:编译项目(以Maven项目为例)
build_job:
  stage: build
  script:
    - echo "Installing dependencies..."
    - mvn clean install -DskipTests  # 跳过测试,加快构建速度
  artifacts:
    paths:
      - target/*.jar  # 保存构建产物(供后续阶段使用)
    expire_in: 1 hour  # 产物过期时间

# 测试阶段:运行单元测试(以JUnit为例)
test_job:
  stage: test
  script:
    - echo "Running unit tests..."
    - mvn test  # 执行测试,生成JUnit报告
  artifacts:
    reports:
      junit: target/surefire-reports/*.xml  # 将测试报告上传至GitLab(可在UI中查看)

# 部署阶段:仅当测试通过后部署到生产环境(可选)
deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production..."
    - scp target/*.jar user@server:/opt/app/  # 示例:将构建产物复制到服务器
  only:
    - master  # 仅当master分支有推送时触发
  when: on_success  # 仅在前面所有Job成功时执行

关键说明

  • stages:定义流程的阶段顺序(build→test→deploy),Job按阶段依次执行。
  • artifacts:用于传递阶段间的文件(如构建产物),expire_in设置过期时间(避免占用过多存储)。
  • reports:上传测试报告(如JUnit),GitLab会自动解析并在CI/CD界面显示测试结果。

4. 配置Runner执行Job

Runner会自动监听项目的CI/CD事件(如代码推送、合并请求),并根据.gitlab-ci.yml中的配置执行Job。

  • Runner类型选择
    • Shared Runner:GitLab提供的公共Runner(无需自维护,但灵活性低,适合小型项目)。
    • Specific Runner:自托管Runner(如上述注册的Runner),适合需要自定义环境(如Docker、特定操作系统)的项目。
  • 触发条件:通过onlyexcept关键字控制Job触发时机(如only: - master表示仅master分支推送时触发)。

5. 查看测试结果

  • CI/CD管道页面:进入GitLab项目→CI/CD→Pipelines,可查看所有Pipeline的执行状态(成功/失败)。
  • Job详情:点击Pipeline中的test_job,可查看Job的日志(包括测试输出)和测试报告(若配置了artifacts.reports.junit)。
  • 合并请求检查:若在rules中配置了if: '$CI_PIPELINE_SOURCE == "merge_request_event"'(如检测到合并请求时触发测试),测试结果会直接显示在合并请求页面,方便代码审查。

6. 高级优化(可选)

  • 缓存依赖:加速构建过程(如缓存node_modules~/.m2),减少重复下载:
    build_job:
      stage: build
      script:
        - mvn clean install
      cache:
        paths:
          - ~/.m2/repository/  # 缓存Maven依赖
    
  • 并行Job:将测试任务拆分为多个并行Job(如按模块测试),缩短测试时间:
    test_job_unit:
      stage: test
      script:
        - mvn test -Dtest=*UnitTest  # 运行单元测试
    test_job_integration:
      stage: test
      script:
        - mvn test -Dtest=*IntegrationTest  # 运行集成测试
    
  • Docker环境:使用Docker镜像简化环境配置(如避免本地安装Java、Python等):
    test_job:
      stage: test
      image: openjdk:17-jdk  # 使用指定Docker镜像
      script:
        - mvn test
    
  • SonarQube代码质量检查:集成SonarQube进行静态代码分析,提升代码质量:
    sonarqube_check:
      stage: test
      image: sonarsource/sonar-scanner-cli
      variables:
        SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
      script:
        - sonar-scanner -Dsonar.projectKey=my-project -Dsonar.sources=. -Dsonar.host.url=$SONARQUBE_URL -Dsonar.login=$SONARQUBE_TOKEN
      rules:
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'  # 仅在合并请求时触发
    

通过以上步骤,即可在Ubuntu环境下使用GitLab实现自动化测试,覆盖从代码提交到测试报告的全流程,提升开发效率和代码质量。

0