写点什么

中小型研发团队架构实践:高效率、低风险,一键发布并测试的持续集成工具 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:478898

评论

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

看前谷歌工程师是如何副业赚钱的?

非著名程序员

程序员 个人成长 副业赚钱 提升认知

Windows AD日志分析告警平台—WatchAD安装教程

BigYoung

监控 windows 日志 AD 告警

Spark优化之小文件是否需要合并?

华为云开发者联盟

spark 数据 cpu 内存 Spark调优

肯耐珂萨D1轮融资资方阵营揭晓,跟投方为中南资本、青发集团

人称T客

Week10总结

熊威

微服务框架 Dubbo

莫莫大人

极客大学架构师训练营

架构师训练营 第 10 周 作业&总结

Jam

Week10作业1

熊威

HTML5CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第10章有路网PC端主页实战整合

Geek_8dbdc1

神经网络的学习为何要设定损失函数?

wangkx

神经网络 学习 损失函数

超市趣味游戏关卡设计

孙志平

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第9章FlexBox实战有路网

Geek_8dbdc1

面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》

小傅哥

Java 小傅哥 hashmap 面经 红黑树

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第11章有路网移动端主页实战

Geek_8dbdc1

微软看上的Rust 语言,安全性真的很可靠吗

华为云开发者联盟

数据库 开源 rust 安全 代码

《深度工作》学习笔记(6)

石云升

读书笔记 专注 深度工作

工业互联网网络安全渗透测试技术研究

几维安全

网络安全 数据安全;工业互联网 移动应用安全 渗透测试

怎么写一个超棒的 README 文档

程序员生活志

经验总结 文档

致远互联A6+Cloud C位出道 赋能中小企业乘风破浪

爱极客侠

云图说丨手把手教你为容器应用配置弹性伸缩策略

华为云开发者联盟

Docker 云计算 Kubernetes 容器

有限数据量如何最大化提升模型效果?百度工程师构建数据增强服务

百度大脑

人工智能 数据 模型训练 百度大脑

HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局

Geek_8dbdc1

巴黎世家土味病毒营销,B端创业初期,如何用营销壮大种子用户?

北柯

创业 营销 tob

智能汽车安全风险及防护技术分析

几维安全

移动应用安全

SpringBoot 系列(一):SpringBoot项目搭建

xcbeyond

Java 微服务 springboot

Django中的session的使用

BigYoung

django session Cookie

libuv 异步网络编程之 TCP 源码分析

Huayra

网络编程 libuv libuv 源码分析

React TypeScript 项目基本构建2

JackWangGeek

React

安卓移动应用代码安全加固系统设计及实现

几维安全

android 安全评估 移动应用安全

核心稳定、易扩展——开放关闭原则(The Open-Closed Principle)

晃来晃去的萨麦尔

编程习惯 架构分析 软件设计原则

SpringBoot系列(二):如何灵活使用SpringBoot

xcbeyond

Java 微服务 springboot

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