前面提到的内网系统的解决方案,主要原因是:
如果部署到公网,则需要解决如上的矛盾之处。一个比较好的思路就是:
6.2 构建触发器
在兼顾Git的webhook的特点和Jenkins构建特性的情况下,可以提出如下所描述的解决方案:
使用web服务作为中间件,来模拟用户登录:将本来需要多个请求组成的会话变成单一的Http请求(可以在单次请求的url里面加入授权的token),这样就可以被Git的webhook所调用。
基本原理图如下:
主要的通讯过程为:
当然,由于 Jenkins 提供了Pyhon语言的SDK,所以以上 步骤2和3其实可以简化为对其SDK的调用了。
安装方法:
pip install python-jenkins
最简单的使用示例如下:
# coding:utf-8 """ jenkins相关的工具函数及配置 """ from dtlib.dtlog import dlog import jenkins __author__ = 'harmo' jenkins_url = 'http://jenkins.xxxx.com' jenkins_user = 'jenkins_user' jenkins_passwd = 'jenkins_user_password' def build_job(project_name): """ 构建项目 :param project_name: 项目名称 :return: """ jen = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_passwd) jen.build_job(project_name) print("build %s succeed" % project_name) if __name__ == '__main__': build_job("your-project-name")
开发人员只需要在自己的web程序里面集成此SDK,并进行参数化,即可完成webhook和jenkins的中间件。
6.3 最终效果
可以达到如下效果:
使用中间件的好处是,对构建的事件有很好的订制性,包括分支监控,提交人权限等等。当然,也可以只使用最简单的功能:只要有人向 release 分支提交了代码,那么就会触发自动构建流程,这样就完成了整个流程了。
当然,构建成功之后到发布还有一些后续的流程,比如:
开发人员完成代码,自测完毕后,推送代码到 release 分支
触发自动构建,构建成功,并生成构建产物
将构建产物发布到 测试服务器
由 自动化发布系统 完成构建产物向生产服务器发布的过程
6.4 其它说明
在得知Jenkins有Python语言的SDK之前,其实还有个其它方法也能够完成登录授权并调用构建接口。直接通过接口来模拟用户登录行为(因为Jenkins登录处不需要验证码),然后获取登录成功的sessionid ,以此作为授权token来调用构建的接口。
具体的技术实现的代码细节不在本文的讨论内容中出现,只要了解登录的原理,很容易就开发出来。
此处做一些说明的目的是,其实只要了解原理,即使官方没有提供一些工具,仍然也是有办法完成想要的功能的。
7 持续集成的应用场景
持续集成的平台搭建完毕后,关于其可应用的项目也进行一些简单的介绍。
基本上任何的软件项目,从生产到最终发布都可以划分为如下几个过程:
不同类型项目,无非就是构建过程不同而已,本文也简单的列举一下几类项目的应用方式的流程,关于具体的技术手段就由各人根据各自的项目去做相应的订制开发了。
7.1 脚本类服务端项目
主要的代表有:Php,Python等等。
它们的构建产物就本身的源代码,所以整个持续集成的过程如下:
7.2 需要编译的服务端项目
主要的代表有:Java等。
过程如下:
7.3 Web前端项目
主要代表有:Javascript,css等。
过程如下:
7.4 移动端App项目
主要代表有:Android等。
过程如下:
开发人员发布代码到Git仓库
Jenkins同步代码到本地,并使用构建工具生成构建产物Apk
将构建产物统一备份到相应目录,做好发布产物的备份,方便回滚
安装到设备,执行测试
8 运行效果
Jenkins系统运行界面:
Jenkins本身可以实现如下功能:
再通过文章前半部分提到的系统,团队就可以达到 持续交付 和 持续部署 的目的,从而实现项目的 快速迭代 。
持续交付:
持续部署:
当然,还有后续的更多的扩展功能,就需要测试开发人员去实现了。
9 小结