持续集成 简介环境搭建
1. 持续集成简介
1.1 持续集成的作用
随着互联网的蓬勃发展,软件生命周期模型也经历了几个比较大的阶段,从最初的瀑布模型,到 V 模型,再到现在的敏捷或者 devops,不论哪个阶段,项目从立项到交付几乎都离不开以下几个过程,开发、构建、测试和发布,而且一直都在致力于又好又快地完成软件的交付。
然而大多数互联网公司面临的常态却是,临近上线日全员待命,如临大敌,通宵达旦,生怕出现上线事故导致版本回滚,即使暂时上线成功后也可能会出现明明测试环境全部通过了,却依然有各种线上质量问题频发。这些现象的主要原因就是代码合并的太晚,而且每次改动未经过充分的测试,代码合并时出现冲突,为了解决冲突重新修改代码,新修改的代码又有可能会引发新的问题,进入了恶性循环。
那么如何才能快速地合并代码,快速地构建,快速地测试,快速地发布高质量的代码呢?持续集成就应运而生了,它的宗旨就是多次合并代码,合并完成后在各种环境下进行多次充分的测试,保证版本的可用性和代码更改的正确性。
1.2 持续集成的定义
我们经常听到的持续工程方法有 3 个,分别为持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deploy,CD)。
- 持续集成:指的是在一定时间内,开发人员多次将代码合并到同一主干上。代码入库后将代码编译打包成可以发布的形式,先发布到测试环境进行详细全面的测试(如果是代码修复的情况下可以根据实际情况只进行精准的测试),测试环境通过后再发布到预生产环境,最终部署到线上环境。目的就是频繁的集成以便发现其中的错误。
- 持续交付:强调的是短时间内完成可以随时发布的软件产品,对每一个进入主干分支的代码提交后,构建打包,测试环境验证通过,预发布环境进行验证,保证产品是可发布的状态。目的是快速地得到市场的反馈,以便更好地进行开发和设计。
- 持续部署:将每一次代码提交后,都构建出产品直接上线,交付给用户使用。
以上 3 个流程的本质都是为了保证每一次代码合并后都能经过一系列的验证,保证这些变更的质量。以下是 3 个持续过程的流水线示意图:
1.3 持续集成的原则
测试要尽量得充分
因为持续集成最终的目的是保证版本的可用性,而且由于多人协作,合并后的代码有可能对整个的软件都会有影响,所以一般情况下需要把所有的测试流程都走一遍,比如静态代码扫描、单元测试、功能测试、接口测试、性能测试等等;如果只是修复了一些 bug,代码改动不大的情况下,可以只做一些针对性测试。
测试的速度要尽可能得快
持续集成中每天都会有代码合并,甚至一天有好几次合并,如果测试的效率不够高的话很可能会出现一个打包的版本还未测试完成,新的版本就已经出现了,甚至积压几个版本,这样的话就不能及时的发现是哪个版本出现的问题,而且开发一直是在有问题的版本上进行的修改,所以这就要求测试的速度要快,自动化测试肯定是不可或缺的,甚至还要并行或者分布式执行测试。
尽量使用和生产环境类似的环境进行测试
如果持续集成采用的测试环境和线上环境差异太大的话,测试的结果很可能是不准确的,有些线上的问题也是很难发现的,特别是关于性能测试的结果,资源和锁等问题。所以采用和线上环境完全一样的环境时最理想的,如果条件不允许的话要尽可能采用同比例缩小的环境进行测试,以保证测试结果的准确性。
1.4 整体流程
2. 持续集成环境搭建
Win10 + Jenkins 2.277.2 + JDK 1.8 + Maven + Git + Tomcat
2.1 Git 安装
1)登录官网下载安装包:官网 https://git-scm.com/download/win
2)下载完成后双击安装,如下图所示:
双击 exe 文件,一路 next 即可。
3)配置环境变量:将 Git 的 bin 目录 添加到环境变量。
4&#