2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

流媒体云时代的声与色,融云铺就的桥与路

脑极体

网站域名备案怎么做?有哪些快速备案的方法?

姜奋斗

网站 备案 网站搭建 域名解析 网站平台

手抖了

shengjk1

随笔杂谈

别让非理性思维毁了你的人生

看山

随笔杂谈 非理性 认知偏差 自控术

浅析Python中的列表和元组

wangkx

Python python升级

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

xcbeyond

Java 微服务 springboot

DSN 主流项目调研 3——Orbit数据库的故事

AIbot

区块链 分布式存储 IPFS 分布式文件 Orbit

Cobra 命令自动补全指北

郭旭东

cobra Go 语言

低/零代码会让程序员失业吗?

代码制造者

程序员 低代码 零代码 信息化 编程开发

熬得住,人生路

shengjk1

随笔杂谈

普通工程师简史

郭华

解析中美数字货币竞争战略 | 构建属于“人类命运共同体”的货币体系

CECBC

数字货币 人民币

数据平台、大数据平台、数据中台……你确定能分得清吗?

华为云开发者联盟

大数据 数据中台 开发者 数据湖 数据

Django中的session的使用

BigYoung

django session Cookie

SpringBoot系列(三):SpringBoot特性_SpringApplication类(自定义Banner)

xcbeyond

Java 微服务 springboot Banner

流量明星翻车的“直播卖房”,为什么众盟做成了?

脑极体

害怕

shengjk1

随笔杂谈

奋斗在一线大城市的年轻人的生活工作实录(工厂蓝领篇)

Learun

程序员 软件开发 故事 企业信息化 短片小说

LeetCode题解:88. 合并两个有序数组,for循环合并数组+sort排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

Django查看操作数据库的执行命令

BigYoung

数据库 django 操作

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

石云升

读书笔记 时间管理 专注 深度工作

Kafka和RocketMQ底层存储之那些你不知道的事

yes

kafka RocketMQ 零拷贝 Mmap

关于微服务架构的一些思考

俊俊哥

微服务

每个大火的“线上狼人杀”平台,都离不开这个新功能

ZEGO即构

游戏 RTC 社交

你看脸吗?

shengjk1

随笔杂谈

我国开启“逆袭战”,区块链的盛夏来了?

CECBC

云计算 区块链技术

美丑平等

shengjk1

随笔杂谈

一文搞懂Flink rocksdb中的数据恢复

shengjk1

大数据 flink源码

DSN 主流项目调研 2——Sia和SAFE Network

AIbot

区块链 分布式存储 分布式文件存储 Sia SAFENetwork

JAVA位运算

彭阿三

Java 位运算

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