写点什么

中小型研发团队架构实践:高效率、低风险,一键发布并测试的持续集成工具 Jenkins

  • 2018-01-04
  • 本文字数:2650 字

    阅读完需:约 9 分钟

一、Jenkins 简介

当每月发布次数变得越来越多时,如超过 200 次,发布工作人员的工作量会翻倍,此时由人工发布操作失误引起的风险会变得越来越大。为了提高项目的发布效率,也为了降低由人工操作失误带来的风险,需要引进持续集成工具。

Jenkins 是一个用 Java 语言编写的开源持续集成工具,最开始被称作 Hudson。Jenkins 在持续集成领域市场份额中居于主导地位,被各种大小规模的团队用于用各种语言实现的各类项目中,语言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。选择 Jenkins 的理由如下:

  • 易于使用:Jenkins 的用户界面简单、直观、友好,发布工作人员只需要通过简单的 UI 操作就可以替代原来繁琐的发布工作。
  • 拥有良好的扩展性:提供数以百计的开源插件可供使用,而且几乎每周会有新的开源插件贡献进来,这些插件的安装都十分快捷和简单。
  • 发展良好:Jenkins 开源社区的规模变得越来越大、活跃度也变得越来越高,发展速度非常快。

二、Jenkins 插件及相关工具

1、Jenkins:持续集成工具。

2、Git:源代码管理工具,是目前流行的分布式版本控制系统。需要安装的 Jenkins 插件有:

3、TFS:可选,源代码管理工具。

4、MSBuild:Visual Studio 中自带的一个程序编译组件。需要安装的 Jenkins 插件是 MSBuild Plugin 插件。

5、FTP:可选,通过 FTP 把编译好的发布文件部署到应用服务器中。需要安装的 Jenkins 插件是 Publish Over FTP 插件。

6、Jenkins 角色及权限管理:需要安装的 Jenkins 插件是 Role-based Authorization Strategy 插件。

7、Python 脚本:自写的 Python 脚本放在 Jenkins 服务器中。可以实现 Jenkins 把编译好的发布文件部署到远程应用站点服务器,以及实现回滚操作 Rollback。

8、PxExec.exe 工具:装在 Jenkins 服务器中,利用这个工具,可以在远程服务器中执行命令如 xcopy。

9、SoapUI 自动化测试:用于接口测试自动化,同时需要安装的 Jenkins 插件是 HTML Publisher plugin 插件。

10、回滚操作 Rollback:需要安装的 Jenkins 插件是 Build with Parameters,用于指定哪个项目回滚到哪个备份版本。

三、Jenkins 关键配置

3.1、邮件配置

Email 是 Jenkins 最基本的通知技术。什么情况下,需要 Jenkins 发送电子邮件通知?例如,在一个构建失败(例如因为编译错误)后。

3.2、角色及权限管理

首先设置全局角色和项目角色,其中 Pattern 是用来设置构建作业名的命名规范,例如:规定了构建作业名的命名规范是{发布环境}.{产品线英文名全称}.{项目名},那么要发到生产环境、属于 Trip 产品线的所有构建作业,其 Pattern 设置的值为【(?i)prod.trip.*】,表示构建作业名必须以 prod.trip 开头,而且不区分大小写,用于发布到生产环境。

然后,分别为 Jenkins 账号分派全局角色和项目角色:

3.3、部署到集群

Jenkins 通过运行自写的 Python 脚本把编译好的发布文件部署到远程应用站点服务器中,以及同步到集群内其他应用站点服务器,所以需要新增构建步骤配置,参考如下:

其中,.py 脚本(即 Python 脚本)内容如下:

.py 脚本实现了如下逻辑

第 1 步、备份

在远程应用站点服务器中,备份将要部署新版本的那个应用系统的所有文件。利用 PxExec.exe 工具,让 Jenkins 服务器远程连到应用站点服务器。然后在这台应用站点服务器中,利用 xcopy 命令,把将要部署新版本的这个应用系统站点目录之下的所有文件拷贝到这台应用站点服务器中的备份目录下。

第 2 步、部署

部署到这台远程应用站点服务器。先利用 xcopy 命令,把由 Jenkins 编译好的、位于 Jenkins 服务器的文件拷贝到这台应用站点服务器共享目录之下,以.config 结尾的配置文件不会被拷贝。再利用 PxExec.exe 工具,让 Jenkins 服务器远程连到这台应用站点服务器。然后在这台应用站点服务器中,利用 xcopy 命令,把临时存放目录下的文件拷贝到这个应用系统站点目录之下。

第 3 步、同步

同步发布文件到该应用系统集群内的其他应用站点服务器。利用 PxExec.exe 工具,让 Jenkins 服务器远程连到这台应用站点服务器,然后在这台应用站点服务器中,利用 xcopy 命令,把该应用系统站点目录下的所有文件拷贝到集群内的其他应用站点服务器的该应用系统站点目录之下。

3.4、SoapUI 接口自动化测试

测试用例提交到版本库(如 Git)后,通过 Jenkins 把它编译,编译后,通过 SoapUI 一键调用,开始自动化测试。一旦自动化测试完成,会生成报表,通过 HTML Report 把它给呈现出来,如下图所示。

3.5、UFT 界面自动化测试

3.6、回滚操作 Rollback

General 配置:

构建配置:

选择将要回滚哪个项目以及回滚到哪个备份版本号:

3.7、暂未解决的问题

  • 1、数据库发布与回滚。
  • 2、应用配置文件的发布与回滚。
  • 3、加入 QA 流程控制,经过测试工程师确定后,方可发布。

以上三个问题也可以借助其它工具来实现,分别是数据库发布工具、集中式配置服务、流程管理工具甚至邮件确认。

四、总结,Jenkins 使用价值

  • 减少发布工作人员的大量日常工作量,大大提高项目的发布效率。
  • 不容易出错,降低人工发布带来的风险。
  • 可 24 小时随时发布。
  • 方便紧急修复或回滚操作 Rollback。
  • 方便对发布流程进行控制、标准化。
  • 方便发布统计、历史版本可追溯。

五、更多资料

作者介绍

张辉清,10 多年的 IT 老兵,先后担任携程架构师、古大集团首席架构、中青易游 CTO 等职务,主导过两家公司的技术架构升级改造工作。现关注架构与工程效率,技术与业务的匹配与融合,技术价值与创新。

杨丽,拥有多年互联网应用系统研发经验,曾就职于古大集团,现任职中青易游的系统架构师,主要负责公司研发中心业务系统的架构设计以及新技术积累和培训。现阶段主要关注开源软件、软件架构、微服务以及大数据。

本专题已经更新了这些文章,点击蓝字跳转阅读:

感谢雨多田光对本文的审校。

2018-01-04 16:478200

评论

发布
暂无评论
发现更多内容

OpenTiny 妇女节限时特别活动来啦~

OpenTiny社区

开源 Vue 前端 低代码 组件库

Sharding-JDBC源码解析与vivo的定制开发

vivo互联网技术

源码解析 sharding-jdbc 定制开发

【技术探讨】无线通信模块拉距测试,是否一定要带笔记本电脑?

Geek_ab1536

比特币BRC20铭文智能打币工具开发

薇電13242772558

BRC-20

RAG一文读懂!概念、场景、优势、对比微调与项目代码示例

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 开发者说 rag

使用 SPL 高效实现 Flink SLS Connector 下推

阿里巴巴云原生

阿里云 云原生 sls

观测云产品更新 | 监控器、场景图表、链路等优化

观测云

监控 链路

探索基于Stable Diffusion的智能绘画大模型

百度开发者中心

人工智能 大模型 绘画工具

探索AI绘画的无限可能:一站式集成大模型工具

百度开发者中心

人工智能 大模型 AI绘画

揭秘QQ的AI绘画大模型技术——QQGC深度解析

百度开发者中心

大模型 绘画

长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践

JackJiang

即时通讯;IM;网络编程

TDengine 3.2.3.0 版本发布,流计算等八大板块功能更新

TDengine

tdengine 时序数据库

从原理到实践,拆解人工智能的神秘面纱

测试人

软件测试

NineData与OceanBase携手完成产品兼容认证,共筑企业级数据库新生态

NineData

数据库 oceanbase 兼容 NineData 奥星贝斯

简单聊聊租户隔离定义以及优势

行云管家

IT运维 租户 租户隔离

义乌等保测评公司有哪些?用哪款堡垒机好?

行云管家

等保 义乌

新规正式发布 | 百度深度参编《生成式人工智能服务安全基本要求》

百度安全

京东JD商品详情API引领电商智能化新潮流

技术冰糖葫芦

API 接口

[自研开源] MyData 使用手册v0.7.1

LIEN

开源 数据集成 业务融合 API对接 mydata

直播预告|小白开箱: 云数据库在五朵云上的评测

NineData

评测 选型 云数据库 NineData 云猿生

中小型研发团队架构实践:高效率、低风险,一键发布并测试的持续集成工具Jenkins_DevOps & 平台工程_张辉清_InfoQ精选文章