Jenkins实现CI/CD流水线


一、环境准备与配置

  1. Jenkins插件安装

    1. 登录Jenkins → Manage Jenkins → Plugins → 安装必备插件:

      • GitLab Plugin(集成GitLab)

      • HTML Publisher Plugin(展示测试报告)

      • Pipeline(定义流水线)

      • Pytest Report Plugin(解析pytest结果)

  2. 配置GitLab凭证

    1. Manage Jenkins → Credentials → 添加GitLab API Token:

      • 类型:Secret text

      • Secret:从GitLab Settings → Access Tokens 生成(权限:api、read_repository)


二、代码仓库与项目结构

  1. GitLab代码规范

    1. 在PyCharm中确保项目结构符合:

      bash 复制代码
      project-root/ ├── tests/ # 测试用例目录(test_*.py或*_test.py) ├── requirements.txt # Python依赖 ├── Jenkinsfile # Pipeline脚本 └── conftest.py # pytest配置
    2. 推送代码到GitLab仓库。

  2. 测试报告生成配置

    1. 在pytest执行命令中添加报告参数(Jenkinsfile中调用):

      bash 复制代码
      pytest --junitxml=test-results.xml --html=report.html

三、Jenkins流水线设置

步骤1:创建Pipeline任务
  • 新建任务 → 选**Pipeline** → 输入任务名

  • Pipeline配置:

    • Definition: Pipeline script from SCM

    • SCM: Git → 填写GitLab仓库URL

    • Credentials: 选择已配置的GitLab Token

    • Script Path: Jenkinsfile(需在代码根目录)

步骤2:编写Jenkinsfile(核心脚本)
Groovy 复制代码
pipeline { agent any stages { // 拉取代码 stage('Checkout') { steps { checkout scm } } // 安装依赖 stage('Setup') { steps { sh 'python -m venv venv' sh 'source venv/bin/activate && pip install -r requirements.txt' } } // 执行测试 stage('Test') { steps { sh 'source venv/bin/activate && pytest tests/ --junitxml=test-results.xml --html=report.html' } } // 发布报告 stage('Report') { steps { publishHTML target: [ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: '.', reportFiles: 'report.html', reportName: 'HTML Report' ] junit 'test-results.xml' // 集成JUnit报告 } } } post { always { // 清理Python虚拟环境 sh 'rm -rf venv' } } }
步骤3:配置定时触发
  • 在Pipeline任务配置页 → Build Triggers → 勾选Build periodically

  • 日程表语法:H 22 * * *(每天22:00构建)


四、高级优化与异常处理

  1. 失败重试机制

    1. 安装插件pytest-rerunfailures,在pytest命令中添加:

      bash 复制代码
      pytest --reruns 3 --reruns-delay 2 # 失败重试3次,间隔2秒
  2. 多节点 并发 执行

    1. 使用pytest-xdist加速测试:

      bash 复制代码
      pytest -n 4 # 4进程并行
  3. GitLab Merge Request 验证

    1. 在GitLab项目设置 → Merge Request → 启用Pipelines must succeed

    2. Jenkins自动触发MR流水线(需在Jenkinsfile中定义when { changeRequest() })


五、验证与调试

  1. 手动触发测试

    1. Jenkins任务页 → Build Now → 查看Console Output日志
  2. 报告查看

    1. 构建完成后 → 左侧菜单**HTML Report**查看测试详情
  3. 常见问题排查

    1. 依赖安装失败 :确认requirements.txt路径正确

    2. 权限错误:Jenkins用户需有Python环境执行权限

    3. GitLab触发失败:检查API Token权限和Webhook配置(GitLab → Settings → Webhooks)


六、完整流程图示

html 复制代码
graph LR A[PyCharm代码推送GitLab] --> B[Jenkins定时/触发构建] B --> C1[拉取代码] --> C2[安装依赖] --> C3[执行pytest] C3 --> D{测试通过?} D -- 是 --> E[发布HTML报告] D -- 否 --> F[邮件通知失败] --> G[开发修复]

通过以上步骤,可实现每日自动执行接口测试、生成可视化报告,并通过Jenkins-GitLab集成确保代码合并质量。若需扩展容器化执行,可在agent中配置Docker节点。

相关推荐
杨云龙UP11 小时前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
隔窗听雨眠11 小时前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
运维行者_11 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
xiaoyunxuexibiji12 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能
画中有画12 小时前
在自动化脚本中调用其他脚本文件
运维·自动化
Android系统攻城狮12 小时前
Linux FFmpeg深度解析之avcodec_alloc_context3调用流程与实战(十四)
linux·运维·ffmpeg·车载音视频·音视频进阶·ffmpeg音视频进阶
老李IT笔记12 小时前
抹除之后机器上的受管应用可以留下:这一步省掉的是哪段时间
运维·服务器
李纲明13 小时前
WordPress 定时发布不准点或备份/邮件从不跑:先分清 WP-Cron 触发与 DISABLE_WP_CRON,再查回环与系统 Cron
运维·性能优化·wordpress·定时任务·devdiy·wp-cron
Decay__13 小时前
01_MySQL 体系架构全解 —— 连接层、SQL 层、存储引擎层与 InnoDB 深入
运维·数据库·sql·mysql·架构