前言:
近期我们上了jenkins实现了代码的自动发布和app的自动打包,而且其中的一些实现也在我的博客总结了文章,各种文章前后顺序比较杂乱,就已文本作为相关持续集成文章的一个汇总。
下面是我用了一个下午时间画的一个关于持续集成的脑图,其实画完我不是很满意,感觉想表达的整个流程没有很好的表达出来,但是好在大部分的知识点感觉还是没啥问题的,就贴出来了供大家参考,如果有不同看法,可以通过右侧的qq和微信直接联系到我进行沟通。
版本迭代
每次的版本迭代,其实就是产品版本号的变动(功能添加,bug修改),通俗一点就是开发周期;这个需要有固定的时间和流程。比如:我们每次的版本迭代时间为两周(10个工作日),其中什么需要多长的开发代码时间、多长时间测试、多长时间修改bug,还有什么时候上线都需要流程,只有有了这个流程才能很好的做持续集成,产品和运营要是每天都给开发提需求,代码每天都在上线,这种情况玩持续集成就难了。
在版本迭代的过程中,还需要一些工具,来帮助我们实现更好的团队沟通,比如一些文档的共享(代码规范、流程文档、功能点),需求的管理,bug的管理,软件的共享等等,都可以帮助我们更好的团队协作,一般这些工具,都是运维来负责维护和管理。
相关文章:
持续集成、持续交付、持续部署简介
文档管理——confluence部署
bug/需求管理——jira部署
gitlab代码管理
分支管理:代码提交到gitlab,必须要有分支管理和严格的权限控制,不然所有开发人员都修改一个分支那就乱套了,一个项目最少需要分成3个分支,比如master(开发分支),dev(测试分支),hotfix(bug修改分支)。具体分支如何命名还是需要根据你们公司实际情况决定,不同场景git分支管理可以参考git分支管理最佳实践
代码质量管理:现在的代码质量管理,无非就是人为cide review,和第三方代码扫描工具(审核的结果还需要人为的验证),具体使用什么方式,就看你们公司实际情况了
相关文章:
gitlab基于国内源部署
自动化脚本
我觉得只要是做运维的,能够手工把代码部署到线上,那么就一定可以写出自动化部署的脚本,脚本的编写需要结合公司实际情况,我这里只是给出相关知识点的参考。只要有了自动化的部署脚本,就可以使用jenkins了。
相关文章:
jenkins介绍部署及三种构建方式配置
自动部署
自动化的部署主要就是服务器代码的更新:java、php
PHP部署发布的效率也相对简单,PHP文件发到线上即可运行,不用复杂的编译、打包和启停动作,只需要获取到最新的代码,一个rsync操作即可。
但是对于Java应用来说整个环节就没有这么简单了,Java文件涉及到编译、二方包、三方包依赖,然后编译打包后,将软件包发布到制定的机器上,然后还要重启Java进程,最新的文件才能得以执行,期间还会涉及服务的注册和下线问题等等,这些都是需要考虑的。
相关文章:
使用shell实现php代码的自动部署
使用shell脚本实现java代码的灰度发布
自动打包
关于app的自动化打包无论是安卓还是ios都是比较简单的(安卓打包一条命令搞定,IOS打包和导入包也就两条命令),只需要事先在服务器上面安装好安卓开发环境,还有xcode,然后手动进行打包,手动打包成功之后,就可以把过程写成脚本了。
关于APP打包需要注意的地方:就是app的签名问题,Android还好只需要一个证书和密钥,但是IOS用到的证书和帐号就比较多了,在打包之前需要和开发沟通好签名的问题,不然签名是一个大坑。
安卓自动打包(基于gradle)
IOS自动打包记录
私服
因为java和Android代码都会有一些jar包的依赖,这个包在编译的时候会去中央仓库下载,同时也会有一些内部的jar包存放,这个时候就需要在企业内部有一个私服了。
maven介绍及私服搭建
自动化测试
自动化测试是持续集成的基础,如果自动化测试做的好,能够很好的减少产品的迭代时间。
一个app需要测试的东西很多,一般情况下在大中型公司都会有专门的测试团队来做这些;但是很多中小型公司,测试人员对服务器和监控系统没有操作权限(我是从来没有给过我们公司测试人员服务器和监控权限),那么服务器方面的性能测试和API测试就要有运维人员和开发人员共同完成。
相关文章:
jmeter压测网站、数据库、接口及分布式压测
jmeter实现api自动化测试