【工程实战】第九篇:持续集成 —— Jenkins 与 GitLab CI:构建无人值守的自动化流水线

专栏进度:09 / 10 (自动化实战专题)

持续集成(Continuous Integration, CI) 的核心目标是:尽早发现集成错误。我们将实现"代码提交 -> 自动触发 -> 并行执行 -> 报告发布 -> 钉钉/邮件通知"的全闭环。

一、 核心流程:自动化脚本的 CI 旅程

在工业界,典型的测试流水线由以下四个阶段(Stages)组成:

Checkout (检出):从 Git 仓库拉取最新的自动化测试代码。

Environment (环境):拉取 Docker 镜像或激活虚拟环境,安装 requirements.txt 中的依赖。

Execution (执行):调用 Pytest 运行测试(通常配合分布式插件 xdist 加速)。

Publish (发布):解析 Allure 结果并推送到看板,发送通知。

二、 实战 1:Jenkins 自由风格任务配置

在 Jenkins 界面中,我们需要完成以下关键配置:

构建触发器:勾选 Poll SCM(定时检查代码更新)或配置 Webhook(代码推送即触发)。

构建步骤 (Execute Shell):

Bash

bash 复制代码
# 激活环境
source venv/bin/activate
# 运行测试并指定 Allure 结果路径
pytest --alluredir=${WORKSPACE}/allure-results
构建后操作:添加 Allure Report 插件,设置 Results Path 为 allure-results。

三、 实战 2:GitLab CI 声明式管道 (.gitlab-ci.yml)

如果你使用 GitLab,只需在项目根目录写一个 YAML 文件,系统就会自动调度。

YAML

yaml 复制代码
stages:
  - test
  - report

run_tests:
  stage: test
  image: python:3.9
  script:
    - pip install -r requirements.txt
    - pytest --alluredir=./allure-results
  artifacts:
    paths:
      - allure-results/
    expire_in: 1 week

generate_report:
  stage: report
  script:
    - allure generate ./allure-results -o ./allure-report --clean
  when: always

四、 关键环节:即时通知(钉钉/企业微信)

测试跑完后,必须第一时间"轰炸"负责人。

Python

python 复制代码
# common/notice_util.py
import requests

def send_dingtalk(msg, webhook_url):
    data = {
        "msgtype": "text",
        "text": {"content": f"【自动化测试告警】\n{msg}"}
    }
    requests.post(webhook_url, json=data)

提示:在 conftest.py 的 pytest_sessionfinish 钩子中调用此方法,即可实现测试结束自动发消息。

五、 避坑指南:CI 环境中的"幽灵问题"

Headless 模式:CI 服务器通常没有显示器。执行 UI 测试时,Playwright 必须开启 headless=True,或者使用 Docker 版的 Playwright(内置了 Xvfb 虚拟显示器)。

并发导致的冲突:如果在 CI 上开启并行执行(-n auto),多个线程可能会同时操作数据库同一个账号。对策:使用账号池管理,或者每个线程使用独立的测试环境。

权限地雷:Jenkins 执行脚本时常因为没有写文件夹权限而报错。对策:确保 Jenkins 账号拥有工作空间的 chown 权限。

相关推荐
heimeiyingwang2 小时前
【架构实战】搜索系统架构设计:从精准匹配到智能推荐
运维·架构·jenkins
JackSparrow4143 小时前
使用Ansible批量管理+更新产品环境服务器配置
运维·服务器·ci/cd·kubernetes·自动化·ansible·sre
醉颜凉3 小时前
实战教程:如何使用 Kibana 对 Elasticsearch 数据进行可视化和操作(从入门到精通)
大数据·elasticsearch·jenkins
逸Y 仙X6 小时前
文章五:Elasticsearch安全通信
java·大数据·安全·elasticsearch·搜索引擎·全文检索·jenkins
smartpi_ai6 小时前
CI-73T 裸片方案 MICBIAS 电容 C11 设计:模块与芯片的差异解析
ci/cd
java_logo8 小时前
Docker 部署 GitLab CE 完整版教程
docker·容器·gitlab·gitlab docker部署·gitlab部署文档·gitlab部署·gitlab部署教程
蹉跎岁月新8 小时前
Jenkins创建一个maven-project
运维·jenkins·maven
lili00128 小时前
AI编程三件套CI集成与质量门禁:从“看起来对“到“证据确凿“
java·人工智能·python·ci/cd·ai编程
tianyuanwo1 天前
Jenkins × Gerrit 集成:自动触发构建的全流程解析
运维·servlet·jenkins
勿芮介1 天前
【研发工具】Jenkins镜像源配置问题及解决方案
运维·servlet·jenkins