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

1,193 阅读7分钟
原文链接: www.infoq.com

一、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 等职务,主导过两家公司的技术架构升级改造工作。现关注架构与工程效率,技术与业务的匹配与融合,技术价值与创新。

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

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

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