【工程实战】第九篇:持续集成 —— 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 权限。

相关推荐
honder试试2 小时前
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
windows·elasticsearch·jenkins
牛奶咖啡133 小时前
CI/CD——在jenkins中使用pipeline方式自动化构建java项目jpress
ci/cd·自动化·jenkins·pipeline是什么·pipeline有啥用·pipeline适用场景·pipeline使用示例
Flittly6 小时前
【日常小问】解决 Jenkins 部署 Spring Cloud 微服务到 Docker 容器启动失败的问题
运维·笔记·docker·微服务·jenkins
落魄实习生1 天前
Jenkins安装及使用
运维·jenkins
玄尺1 天前
jenkins安装和使用
运维·jenkins
lbb 小魔仙1 天前
DolphinDB:以“存算一体“重新定义工业时序数据的边界
开发语言·人工智能·python·langchain·jenkins
yulingfeng591 天前
Elasticsearch 分词器安装(IK+拼音)
大数据·elasticsearch·jenkins
Cory.眼1 天前
AI写CI/CD脚本:Gemini实战指南
ci/cd
牛奶咖啡131 天前
CI/CD——在jenkins中自动化构建与部署java项目jpress的镜像且搭建一键部署gitlab与jenkins环境
ci/cd·jenkins·一键部署gitlab私有仓库·安装部署jenkins·blue ocean构建镜像·jenkins部署镜像·jenkins自动构建部署镜像
海生南梦2 天前
jenkins的groovy沙盒配置
jenkins