<转>about持续集成,你不知道的事

从别处看到了一篇关于持续集成的文章,个人感觉蛮不错的,分享给大家。。。

原文链接:对于持续集成实践的常见问题解答

1、什么是持续集成?

集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构成一个有机整体的过程。知识经济的社会,集成已经成了很重要的一个名词。各行各业基本都会用到集成。

而在软件行业中,集成并不是一个简单的“搬箱子”的过程。因为软件工业是一个知识生产活动,其内在逻辑非常复杂,需求又很难一次性确定,完成的产品与最初的设计往往相差很远。

敏捷宣言中就有一条是说响应变化重于遵循计划。而且由于软件行业的迅猛发展,软件变的越来越复杂,单靠个人是根本无法完成。

大型软件为了重用及解耦,往往还需要分成好几个模块,这样集成就成了软件开发中不可或缺的一部分。

持续集成这个词语最早是由大名鼎鼎的Martin Fowler提出的。他在早期进行软件行业实习的时候就发现一个问题,即集成是项目中的一个大难题。

他在英国一家软件公司实习时,项目经理亲口告诉他一个项目已经开发了好几年了,现在正在做集成,集成已经进行了好几个月了,每个人都很疲惫,并不知道集成什么时候才能结束。

其中一个很重要的原因就是项目集成发生的频率太低,导致大家对项目很没有信心。

在《持续集成》一书中,对持续集成的定义是这样的:持续集成是一种软件开发实践。

在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。

自从在团队中引入这样的实践之后,Martin Fowler发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。

2、持续集成能给团队带来什么好处?

如果想要谈持续集成的好处,那么我们应该先谈谈没有采纳持续集成,项目会出现什么问题。

总体来说,没有采用持续集成的项目一般会面临下面四个问题:

①、没有一致的可部署的软件。只有在完成集成测试、系统测试后,才能得到可用的软件,整个过程中只有最后时刻才能拿到可运行软件。集成活动不一定在一个标准的构建机器上生成,

而是在某个开发人员的机器上构建的,那么可能存在在其他机器上无法运行的问题。

②、很晚才发现缺陷,并且难以修复。实践证明,缺陷发现的越晚,需要修复的时间和精力也就越大。从上一个可工作的软件到发现缺陷之间可能存在很多次提交,

而要从这些提交中找出问题并修复的成本会很大,因为开发人员需要回忆每个提交的上下文来评估影响点。

③、低品质的软件。 由于集成时每次包含的代码很多,所以大家的关注点主要都是如何保证编译通过、自动化测试通过,而往往很容易忽略代码是否遵守了编码规范、是否包含有重复代码、

是否有重构的空间等问题。而这些问题又反过来会影响今后的开发和集成,久而久之集成变得越来越困难,软件的质量可想而知。

④、项目缺少可见性。

而通过持续集成的活动,可以实现以下价值:

①、减少风险。缺陷的检测和修复变得更快。软件的健康程度可以测量;

②、减少重复过程。让人们有时间做更多的需要动脑筋的、更高价值的工作。通过对重要过程自动化,克服项目中某些成员对实现改进的抵制;

③、在任何时间、任何地点生成可部署的软件。对客户来说,可以部署的软件是最实际的资产;

④、增强项目的可见性。集成就像我们项目的一面镜子,通过这面镜子能够快速的了解项目目前的状况、存在的问题;

⑤、对开发团队的软件产品建立起更强大的信心。它能够帮我们有效的决策,注意到项目进展的趋势;

3、持续集成都包括哪些要素?

一个最小化的持续集成系统需要包含以下几个要素:

①、版本管理系统:项目的源代码需要托管到适合的版本管理系统中,一般我们使用git作为版本控制库,版本管理软件可以使用github、gitlab、stash等。

②、构建脚本:每个项目都需要有构建脚本来实现对整个项目的自动化构建。比如Java的项目就可以使用gradle作为构建工具。

通过构建工具实现对编译、静态扫描、运行测试、样式检查、打包、发布等活动串起来,可以通过命令行自动执行。

③、CI服务器:CI服务器可以检测项目中的代码变动,并及时的通过构建机器运行构建脚本,并将集成结果通过某种方式反馈给团队成员。

4、持续集成的全景图是什么样子的?

以下是持续集成的一个全景图。从中可以看到我们需要版本管理系统、构建脚本、CI服务器、CI构建机器、反馈机制。

5、持续集成一般都包含哪些任务?

持续集成并不是说只要代码能编译通过就是集成成功,我们已经把每次集成都看做一次完整的测试。任何迁入到代码库中的代码都应该是可以部署到产品环境的。

拿一个Java项目为例,持续集成一般执行的任务有:

①、代码静态扫描:通过静态扫描确定代码的一些潜在bug,比如未被使用的变量等。

②、代码样式检查:团队一致定义出需要遵循的编码规范,并通过一些插件对迁入的代码进行样式合规性检查,防止不守规范的代码进入版本库。

比如方法名首字母小写、类的首字母大写、if关键字后面需要加空格等问题都可以纳入到样式检查中。

③、单元测试、集成测试、系统测试:通过运行自动化的单元测试、集成测试、系统测试可以有效的保证迁入代码的质量。一旦有测试失败,开发人员就需要快速反应进行修复。

④、测试覆盖率检查:一般项目会有个测试覆盖率指标(比如80%),如果代码达不到这样的测试覆盖率,就不允许代码迁入。这样可以保证开发人员在新增功能时也要为新加入的功能编写自动化测试。

⑤、编译打包:确保没有任何语法错误,生成构建产出物。

⑥、发布: 将通过完整构建的产出物放置到产出物仓库,以便进行后续部署。

这些任务都必须是能通过命令行自动完成的,不同类型的项目任务略有不同。

6、持续集成这些任务应该遵循什么顺序?

其中有一个重要的原则就是fail fast,即快速失败。一般会把运行时间短的、价值大的任务放在前面,而运行时间长的任务放置到后面。

因为构建成功的标准是所有的验证都能够通过,那么执行时间短的任务放在前面能更快的得到反馈。

7、为什么我们组搭建了持续集成服务器,并且还派专人看守CI,但是感觉项目并没有明显的改善?

并不是说搭建了持续集成服务器就说明团队能成功运行持续集成了。持续集成是一个实践,所以大家要遵循一些原则。

大家可以先思考一下问题:

①、在CI服务器上多久会看到一次集成?

②、CI服务器的集成结果是绿色居多(指构建成功)还是红色居多(指构建失败)?

③、当构建失败后,团队成员有没有第一时间修复构建,有没有在构建失败的情况下依然在提交代码,在提交代码之前有没有进行本地的私有构建?

从这些问题可以引申出持续集成中需要遵循的一些原则:

①、经常提交代码

②、不要提交无法构建的代码

③、立即修复无法集成的构建

④、编写自动化的开发者测试

⑤、必须通过所有测试和审查

⑥、执行私有构建

⑦、避免迁出无法构建的代码

8、本地提交代码应该经过哪些步骤?

本地提交可以采用经典的七步提交法

时间: 2025-01-13 10:55:51

<转>about持续集成,你不知道的事的相关文章

转载:持续集成Jenkins+sonarqube部署教程

转载: 持续集成Jenkins+sonarqube部署教程 持续集成 1 引言 1.1 文档概要 本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建.用一个例子介绍jenkins的编译打包部署,代码检查.最后集成jenkins.(现阶段只是简易的集成,后续需要修改accio源码做深度集成) 1.2 预计读者 系统配置管理员:要懂得搭建持续集成环境,有问题可以排查:架构师:了解持续集成实现原理,协助项目接入持续集成.项目在持续集成环境运行中,进行维护.分析构建异常等:维

(持续集成)win7上部署Jenkins+MSBuild+Svn+SonarQube+SonarQube Scanner for MSBuild (一)

一.Jenkins介绍 jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更直白点,就是各种项目的”自动化”编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:java, c#, php等)的项目构建,也完全兼容ant.maven.gradle等多种第三方构建工具,同时跟svn.git能无缝集成,也支持直接与知名源代码托管网站,比如github.bitbucket直接集成. jenkins官网地址为https://jenkins.io/index.html,jen

python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?

python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windows的服务了,那么jenkins是计算机服务理的一个后台服务,所以跑cases 的时候不显示浏览器 解决办法:1.我们需要关掉jenkins后台服务,让他从cmd(dos窗口)启动,类似于tomcat的手动启动下面的方法适合不用tomcat的同学(注意,用也可以配置好Tomcat放在webapp下启

持续集成Jenkins+sonarqube部署教程

1 引言 1.1 文档概要 本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建.用一个例子介绍jenkins的编译打包部署,代码检查.最后集成jenkins.(现阶段只是简易的集成,后续需要修改accio源码做深度集成) 1.2 预计读者 系统配置管理员:要懂得搭建持续集成环境,有问题可以排查:架构师:了解持续集成实现原理,协助项目接入持续集成.项目在持续集成环境运行中,进行维护.分析构建异常等:维护人员:重启服务.排查环境问题.项目接入支持: 1.3 关于持续集成

持续集成之“分支策略”?

现代版本控制系统(SCM)的作用已不仅仅是保存历史版本,它还是各软件开发组织利用其分支功能实现多人并行开发,提高生产效率的一种工具.对于稍有历史的软件产品来说,一般都会有代码分支的出现,也常常见到一些历史悠久的产品其错综复杂的分支版本树甚至将产品交付团队拖入"无尽维护"的泥潭.分支的目的是希望"分而治之",而持续集成的目的是"频繁集成",这二者之间又有哪些联系呢? 在<测试三角形与分段构建策略原则>一文中,咱们说到:由于自动化测试时间

持续集成之“自动化部署”

在前文<依赖管理>中,我们讨论了如何在代码变得庞大,组件增多的情况下,做好外部库和内部组件依赖管理,从而提高构建效率.可以应用的实践包括:一次生成,多次复用:建立统一制品库,外部依赖库可以使用像Maven或Ivy这样的工具进行统一管理:对架构进行调整,使一个大的代码库分成多个组件:每个组件有自己的持续集成体系:对多个组件做持续集成.然而,解决一个问题后,总会有另一个问题等在那里,需要你来解决.这次Joe的团队遇到了部署问题. 星期一早上,Alice一进办公室,就看到一脸倦意的Joe坐在椅子上,

持续集成之“依赖管理”

在前文<分支策略(续)>中,我们讨论了多组件应用程序的持续集成策略,即:为相对独立的组件创建自己专属的代码库,然后通过现代持续集成工具进行组件间的持续集成.Joe的团队在首次发布之后,开始使用这种方式.然而,没有多久,他们就遇到了一个问题:一次提交构建所花费的时间太长. 一天,Joe就早早地来到了办公室.因为他前一天下班前,他开发的用户故事还有一小点就完事儿了.他想利用早上这点儿时间把它搞完,交给测试人员进行测试.他修改了某个模块的一段代码,在本地构建测试通过以后,就提交了, 然后起身去楼下买

[转] 持续集成与持续交付备忘录

URL  :   http://blog.csdn.net/hunterno4/article/details/22525667 一本好书使您改变.它将改变您的思想,您看待问题的角度和方式,最终,它将改改您的行为.然而,所有具有重要意义的改变都不会是在一夜之间发生的,如果您相信这种变革必会发生,不妨朝着这个方向去努力,经常改变,每次改变一点点. ——<持续集成:软件质量改进和风险降低之道> CI的价值: 减少风险:缺陷的检测与修复变得更快:通过持续测试与持续审查,软件的健康程度可以测量:可以减

为什么我们迫切需要持续集成(Continuous Integration)

原文同步至 https://waylau.com/why-we-need-continuous-integration/ 持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础.本文论述了当前软件开发过程中存在的问题,讲解了持续集成.持续集成服务器的概念,最终探讨了为什么我们需要持续集成来解决这些问题. 当前软件开发过程存在的问题 在没有应用持续集成之前,传统的开发模式是这样的: 项目一开始是先划分好模块,分配模块给相应的开发人员: 开发人员