1 概述
持续集成(Continuous Integration)是一种软件开发实践。在本系列文章的前一章节已经对其背景及理论体系进行了介绍。本小节则承接前面提出的理论构想进行具体的技术实现。
《Google软件测试之道》:
"每天,Google都要测试和发布数百万个源文件,亿万行代码。数以亿计的构建动作会触发几百万次的自动化测试,并在好几十万个浏览器实例上执行。面对这些看似不可能完成的任务,谷歌是如何测试的呢?"
希望看完此文章的人,能够自己找到自己的答案。
2 主要环境及工具
以上的技术选型,都是尽量使用 开源 且 主流 的系统,这样的好处如下:
3 原理分析
在上一篇文章里面,对持续集成绘制过一个基本的结构图,如下:
基本流程如下:
开发人员推送代码到Git
Git通知Jenkins
Jenkins开启构建
Jenkins通知自动化发布系统
发布系统持续后续的任务……
这里面涉及的系统有:
关于 自动化发布系统 这个基本上属于运维方面的内容,在互联网产品领域情形和技术需求比较复杂,暂时不列入本部分的内容。但是Jenkins 能够有接口去通知相应的发布系统,以达到 事件信息流的连续性
本文则主要从技术角度来将这些系统联合起来。
4 Jenkins安装及配置
4.1 下载和安装
关于 Jenkins 的下载及安装,可以参考其官网。
https://jenkins-ci.org/
直接下载Ubuntu/Debian版本,在Ubuntu服务器上安装即可。
由于过程比较简单,网上相关教程很多,此处也不再赘述。但是一般Jenkins安装完毕后,最初的权限配置会比较繁琐,所以本文重点从相应的使用场景出发,实现一个完整的带权限配置的解决方案。
5 内网持续集成系统
对于只是在 内网 使用持续集成的团队来说,权限的配置就相对简单一些。因为只是在内网,所以可以将权限的要求放松,只要保证公司网络之外的人无法访问到 Jenkins 服务即可。
注意:如果要和git服务的webhook形成完整的事件流,则git服务也需要在内网,否则 构建事件 无法被 代码推送事件 给触发。
5.1 权限配置
对 Jenkins 进行如下操作:
[系统管理]->[Configure Global Security]->[访问控制]->[授权策略]->[项目矩阵授权策略]
对 匿名用户 进行如下配置:
具体配置界面如下:
注意:如果不这样配置,则后面提到的基于git的构建触发器将无法通过调用指定的url接口来触发构建。因为webhook只能构造 单次 简单的http请求,无法构造由多个请求组成的会话,故而无法调用需要身份授权的接口。
5.2 构建触发器
一般情况下,构建都是以代码的发布作为起始事件点,所以需要和git服务器建立事件关联,在Jenkins具体的项目的配置界面中,对 构建触发器 进行配置。
目前网络上一般都是介绍的这种方式,具体的细节,此处就不再赘述,感兴趣的同学可以自行在网络上搜索。
基本原理图如下:
5.3 最终效果
可以达到如下效果:
以上的内网方案的特点如下:
当然,对于 开发资源相对匮乏 的小团队而言,推荐通过以上方法 快速搭建 自己的内部的持续集成系统,毕竟先快速生产自己的特色产品才是最重要的事情。
6 公网持续集成系统
对于前面的 内网持续集成系统 的优点和缺点都介绍之后,作为一个以 开放为主要精神 的互联网团队来说,肯定是无法满足这样一个 封闭的内部网络 系统的,所以下面就要隆重介绍 公网持续集成系统 。
对于 内网系统 在配置上进行了 偷懒 ,但是实际上却在其它地方付出了 巨大的代价 ,这些代价包括:
所以,如果配置人员拥有一定的系统设计能力和开发能力,还是建议搭建 公网持续集成系统 。
公网方案具有如下特点:
可扩展性强,理论上可以和任何的公共互联网服务进行对接
6.1 权限配置
公网持续构建系统对权限控制有如下要求:
对 Jenkins 进行如下操作:
[系统管理]->[Configure Global Security]->[访问控制]->[授权策略]->[项目矩阵授权策略]
可以建立三类用户并进行权限配置:
登录后,可以查看相应的项目的名称及构建的状态(主要是基本的查看功能)
登录后,可以进行构建操作,对任务进行增加及删除等等高级操作(主要是项目管理功能)
未登录用户,不具备任何权限,只呈现登录界面
有了这样的登录授权机制,就不用再使用网络进行隔离了,此系统就可以放心地放到公网服务器上了。